如何获取应用程序中的所有类

时间:2012-05-03 17:27:33

标签: delphi class rtti delphi-6

我正在编写一个本地化应用程序,我正在通过EnumResourceNames API调用从应用程序资源中读取DFM信息。

但是,该函数返回一个与DFM关联的表单的名称。我尝试从FindClass中获取类,但由于整个操作是在包中编码的,因此FindClass失败。从exe的初始化部分调用RegisterClass例程。

从exe项目中编写的代码中调用时,FindClass工作正常。所以,我已经开发了自己的注册框架,其中我添加了所有的Form类,但这真的很痛苦,因为我需要添加表单的单元,然后将表单类传递给RegisterClass例程。

我希望有人能提供一个简单的解决方案来获取可执行文件中的所有类,通过搜索类名可以从中创建对象的实例。

BTW我正在使用Delphi 6 Update 2.

由于 Rahul W

1 个答案:

答案 0 :(得分:2)

如果应用程序正在调用RegisterClass()并且程序包正在调用FindClass()(反之亦然),那只有在两者包和应用程序都使用启用运行时软件包,以便它们共享RTL的单个实例(这意味着您必须在应用程序和软件包旁边部署RTL和VCL软件包)。否则,您的应用程序和程序包将拥有自己的RTL本地副本。为了在这种情况下共享类,一个项目必须导出额外的函数,其他项目可以在需要时调用其他项目的本地类列表中的本地类。

至于动态检测可用类,这在D6中是不可能的。在D2010之前,RTTI系统没有获得足够的详细信息来执行这种枚举。