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

Delphi 如何获取应用程序中的所有类,delphi,class,rtti,delphi-6,Delphi,Class,Rtti,Delphi 6,我正在编写一个本地化应用程序,其中通过EnumResourceNames API调用从应用程序资源读取DFM信息 但是,该函数返回与DFM关联的表单的名称。我尝试从FindClass获取类,但是由于整个操作都是在一个包中编码的,FindClass失败了。从exe的初始化部分调用RegisterClass例程 当从exe项目中编写的代码中调用FindClass时,FindClass工作正常。因此,我开发了自己的注册框架,在其中我添加了所有表单类,但这是真正的痛苦,因为我需要添加表单的单元,然后将表

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

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

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

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

顺便说一句,我使用的是Delphi6更新2

谢谢
Rahul W

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


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

难道不可能遍历进程内存并识别类吗?不过这只是一个粗略的猜测。这将非常耗时,特定于版本,不值得这么做。只需设计应用程序和软件包就可以轻松地相互交流,手动共享非隐式共享的信息。非常感谢您的回答。我将使用我设计的注册机制来检查类。