解决DLL包组织的项目运行报 a class named Txxx exists

 对于使用DLL包方式组织的项目,很多人都知道如果BUILD WITH RUNTIME PACKAGE不勾选上,会有很多的问题。所以一般会将所有的EXE和DLL项目的BUILD WITH RUNTIME PACKAGE勾选上。每当这时候,你以为万事大吉了。兴奋地编译项目,满怀期待地运行,往往一运行却报错:a class named Txxx exists。。。。。。,遇到这个问题的时候,很多人傻眼了,根本不知道该如何解决。

 

首先分析一下出现这个错误的原因:BUILD WITH RUNTIME PACKAGE勾选上意味着,整个项目都将使用唯一的一份VCL类,编译器会通过检查类名来判断该类是否已经创建实例使用,如果已经使用,则不允许再另外创建一个该类的实例来使用,于是编译器会告诉你a class named Txxx exists。。。。。。;如果BUILD WITH RUNTIME PACKAGE不勾选上,意味着每一个EXE和DLL都可以使用自已的那一份VCL类,编译器对此不作检查,每一个DLL包中都可以创建同一个类的实例来操作。

 

现在已经知道错误的原因了,那么如何解决呢?解决方法就是创建一个BPL包,将多个DLL包都要使用的类放进这个BPL包中,然后在要使用该类的DLL包的BUILD WITH RUNTIME PACKAGE的下一行加入对该BPL的引用。于是问题解决。

posted @ 2011-09-04 15:33  delphi中间件  阅读(386)  评论(0编辑  收藏  举报