【问题标题】:how to get all the classes in an application如何获取应用程序中的所有类
【发布时间】:2025-12-22 04:30:07
【问题描述】:

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

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

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

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

顺便说一句,我使用的是 Delphi 6 Update 2。

谢谢 拉胡尔W

【问题讨论】:

    标签: delphi class rtti delphi-6


    【解决方案1】:

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

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

    【讨论】:

    • 难道不能遍历进程内存并识别类吗?不过只是一个疯狂的猜测..
    • 这将非常耗时,特定于版本,而且不值得付出努力。将应用程序和包设计为相互通信以手动共享未隐式共享的信息会容易得多。
    • 非常感谢您的回答。我将使用我设计的注册机制来检查类。
    最近更新 更多