【问题标题】:How to keep the generated TLB file neat?如何保持生成的 TLB 文件整洁?
【发布时间】:2012-01-12 14:37:13
【问题描述】:

您好,我在 Delphi 中使用互操作调用 C# 代码。 C# 代码有一个二进制文件,并且在 Delphi 5 菜单中:Project-->Import Type Library 点击Add添加tlb文件:XXXX.tlb Unit dir name:输入生成delphi XXX_TLB.pas文件的路径。

如果 C# dll、tlb 和 delphi XXX_TLB.pas 已经存在。现在我在 C# 代码中添加了一个函数,希望 Delphi 也可以调用这个函数。我需要重新编译 c# 并重新生成 delphi XXX_TLB.pas 文件。但是按照上述步骤,我看到新生成的 XXX_TLB.pas 包含了我新添加的函数,但是看起来 XXX_TLB.pas 中的函数顺序与之前完全不同。

例如,在我的 C# 二进制文件中,我有函数: 函数1(); 函数2(); 函数3(); func4();//新添加的

在旧的XXX_TLB.pas中,函数顺序为: 函数1(); 函数2(); 函数3(); 现在 XXX_TLB.pas 是这样的: 函数1(); 函数3(); func4(); func2();

XXX_TLB.pas 仍然可以使用,看起来没有功能差异,但是当我签入 tfs 时,我发现它与以前的版本相比有很大变化。有没有办法让这个新的 XXX_TLB.pas 保持与以前相同的顺序,但也添加我的函数?怎么做?谢谢!

【问题讨论】:

  • 我相信它只是被重新排序的类包装器。 COM 接口不能发生这种情况,因为它会改变可行的顺序。

标签: delphi import typelib


【解决方案1】:

除非您自己开始编写 .pas 文件,否则您不能希望将更改保持在最低限度。这听起来像是一个更糟糕的选择。

可能发生的情况是,自上次导入以来,您更改了任一编译器的版本。否则,人们会期望差异最小。

只需在注释中检查它,说明使用了哪些版本的编译器和 .ocx/.dll。

【讨论】:

  • 旧文件是XP系统生成的,现在我只有windows 7,你觉得可能是这个原因?
  • 我原以为编译器版本的差异实际上更有可能解释 typelib 导入器的输出差异。操作系统应该无关紧要。
  • 我有一个类似的情况,旧的和新的 TLB.pas 文件在它们的顺序上有很大的不同(甚至类被移动了)。我既没有改变编译器也没有改变操作系统版本。这可能是 Delphi 使用的导入器中的一些实现细节。
【解决方案2】:

据我所知,你不能。 在大多数情况下,无论如何我都可以将它们视为一种“黑匣子”,并且只是偶尔需要查看它们以找到特定的声明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 2015-09-25
    相关资源
    最近更新 更多