0

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

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

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

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

顺便说一句,我正在使用 Delphi 6 Update 2。

谢谢拉胡尔 W

4

1 回答 1

2

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

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

于 2012-05-03T23:26:01.850 回答