代码之家  ›  专栏  ›  技术社区  ›  rplusg

如何在C中使用tlb文件?

  •  1
  • rplusg  · 技术社区  · 14 年前

    tlb文件(使用regasm)是由一个dll(使用c#代码)生成的,我可以在c++中使用导入。一切都很好。 有没有办法,我可以用C语言来表达?我刚刚发现导入是c++特有的。那么,有人能告诉我如何在我的C程序中使用吗?

    我的主要目的是在我的C程序中使用用C语言开发的COM动态链接库。

    感谢&Rgds, ~卡尔文

    4 回复  |  直到 14 年前
        1
  •  7
  •   Hans Passant    14 年前

    C-is中的COM编程 非常 痛苦,但并非不可能。不过,责任到此为止。类型库的目的是让一个工具自动生成COM接口和co类声明,以便您可以在代码中使用它们。与.h文件非常相似,但与语言无关。.NET等价物是程序集中的元数据。

    问题是,该工具无法将a.tlb转换为C声明。我相信你对“导入”很熟悉,这就是MSVC使用的东西。但是它生成C++代码,智能指针帮助您创建COM对象,调用它的接口方法并处理错误。如果有一个工具可以生成C,那么这是一个非常隐蔽的秘密。

    一个诀窍让我想到,可以使用OleView.exe、File+View TypeLib来查看类型库的内容。这个视图被反编译成接口定义语言IDL。您可以将此文本复制并粘贴到.idl文件中,并使用midl.exe和/header命令行选项对其进行编译。这将生成一个.h文件,其中包含C++和接口的C声明。应该让您更接近,只要确保类型库是合理稳定的,这样您就不必经常这样做了。

        2
  •  1
  •   Community Aniket Inge    7 年前

    我也面临着同样的问题,因为我需要在C中使用tlb文件

    How to call a COM component in C

    谢谢, 斯韦雷普

        3
  •  0
  •   xlq    14 年前

    C和C++都没有一个输入预处理器指令。

        4
  •  -2
  •   Aamir    14 年前

    你可以用 regasm with /tlb option 在windows注册表中注册类型。之后,您可以像C++代码中的普通COM调用一样创建实例。

    来自MSDN:

    指定/tlb选项时,Regasm.exe将生成并注册一个类型库,描述在程序集中找到的类型。Regasm.exe将生成的类型库放在当前工作目录或为输出文件指定的目录中。为引用其他程序集的程序集生成类型库可能会导致同时生成多个类型库。可以使用类型库为开发工具(如Visual Studio 2005)提供类型信息。如果要注册的程序集是由类型库导入程序(Tlbimp.exe)生成的,则不应使用/tlb选项。不能从从类型库导入的程序集导出类型库。使用/tlb选项与使用类型库导出器(Tlbexp.exe)和Regasm.exe具有相同的效果,但Tlbexp.exe不注册它生成的类型库。如果使用/tlb选项注册类型库,则可以使用/tlb选项和/unregister选项注销类型库。同时使用这两个选项将取消注册类型库和接口项,这可以极大地清理注册表。