tlb文件(使用regasm)是从dll(使用c#代码)制作的,我可以使用#import在c ++中使用它。一切都很好。 有没有办法,我可以在C语言中使用它吗?我刚发现#import是c ++特有的。那么,有人可以告诉我如何在我的C程序中使用它?
我的主要目的是在我的C程序中使用C#开发的COM DLL。
谢谢& RGDS, 〜卡尔文
答案 0 :(得分:7)
C中的COM编程非常很痛苦,但并非不可能。但是,降压在此停止。类型库的要点是让工具自动生成COM接口和共同类声明,以便您可以在代码中使用它们。非常类似于.h文件,但与语言无关。 .NET等价物是程序集中的元数据。
问题是,工具无法将.tlb转换为C声明。我确定你熟悉#import,这就是在MSVC中使用的东西。但它会生成C ++代码,智能指针可帮助您创建COM对象,调用其接口方法并处理错误。如果有可用的工具生成C,那么这是一个非常隐蔽的秘密。
跳过一个技巧,您可以使用OleView.exe,File + View TypeLib来查看类型库的内容。该视图被反编译为IDL,即接口定义语言。您可以将此文本复制并粘贴到.idl文件中,并使用/ header命令行选项使用midl.exe进行编译。这将生成一个.h文件,其中包含C ++和接口的C声明。应该让你接近,只要确保类型库相当稳定,所以你不必经常这样做。
答案 1 :(得分:1)
答案 2 :(得分:0)
C和C ++都没有#import预处理程序指令。
答案 3 :(得分:-2)
您可以使用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选项取消注册类型库。同时使用这两个选项将取消注册类型库和接口条目,这可以大大清理注册表。