【问题标题】:Replace RIDL file and typelib in Delphi XE3在 Delphi XE3 中替换 RIDL 文件和 typelib
【发布时间】:2013-11-18 18:30:27
【问题描述】:

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

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

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

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

如何强制 Delphi 注入类型库? 是否有一些“技巧”(除了刷新 RIDL 之类的明显方法,它可以正确生成单元但对 TLB 资源问题没有任何作用)。

【问题讨论】:

    标签: delphi com delphi-xe typelib


    【解决方案1】:

    据我了解,步骤如下:

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

    【讨论】:

    • 成功了。我禁用了标准的 {$R *.TLB},编译,它产生了错误。我再次启用它,它正确链接了 TLB。谢谢!
    • 要调试这样的东西,请使用资源查看器。这就是我仔细检查我的答案的方式。比尝试注册更快、更直接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多