3

我写了一个测试项目,它公开了一个 COM 工厂和对象。测试并发现我们的实现正在运行 - 我现在想将代码 + 类型库移动到我们的主项目中。我将 RIDL + TLB 文件复制到主项目文件夹中。我相应地重命名了两个文件(主项目名称)。我还删除了项目资源文件,以防 Delphi 将 TLB 数据放在这里。当然,我删除了旧的 TLB 和 RIDL 文件(我还删除了所有 DCU 文件,以防万一)。最后,我将 RIDL 文件添加到主项目并编译。

RIDL 文件在编译期间被 Delphi 拾取,它按预期生成 TLB 文件,但不知何故它没有将 TLB 数据注入 exefile。因此,当我启动应用程序时,我只会收到一条错误消息“无法加载类型库”。在我的代码中,我在启动时自动创建 COM 工厂并更新 Windows 注册表。在关机时会发生相反的情况。

在使用类型库编辑器几个小时后,尝试从 Delphi 和 shell/regsvr32 注册类型库/exe,delphi 出于某种神奇的原因拿起了新文件,一切都按预期工作。

问题是,我不知道“为什么”它一开始就不起作用,我也不知道为什么在尝试不同组合数小时后它会起作用。所以我无法重现成功。在更新我们的代码库时,我必须在另一台计算机/修订版上做同样的事情——但这一次它拒绝工作。

如何强制 Delphi 注入类型库?是否有一些“技巧”(除了刷新 RIDL 之类的显而易见的东西,它可以正确生成单元但对 TLB 资源问题没有做任何事情)。

4

1 回答 1

6

据我了解,步骤如下:

  1. 将 .ridl 文件添加到项目中。这将导致构建过程将其编译为 .tlb 文件。
  2. $R使用如下条件指令链接 .tlb 资源:{$R MyProject.tlb}
于 2013-11-07T09:07:36.407 回答