替换 Delphi XE3 中的 RIDL 文件和 typelib



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

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

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

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

如何强制德尔福注入类型库?是否有一些"技巧"(除了像刷新 RIDL 这样的明显技巧,它会正确生成单元,但对 TLB 资源问题没有任何作用)。

据我了解,步骤如下:

  1. 将 .ridl 文件添加到项目中。这将导致生成过程将其编译为 .tlb 文件。
  2. 将 .tlb 资源与如下所示的$R条件指令链接:{$R MyProject.tlb}

最新更新