c# - 如何在 C 中使用 tlb 文件?

标签 c# c dll com import

tlb 文件(使用 regasm)是从一个 dll(使用 c# 代码)生成的,我可以使用 #import 在 c++ 中使用它。一切正常。 有没有办法,我可以在 C 语言中使用它?我刚刚发现 #import 是特定于 C++ 的。那么,有人可以告诉我如何在我的 C 程序中使用吗?

我的主要目的是在我的 C 程序中使用用 C# 开发的 COM DLL。

谢谢 & Rgds, ~卡尔文

最佳答案

C 中的 COM 编程非常痛苦,但并非不可能。责任到此为止。类型库的要点是让工具自动生成 COM 接口(interface)和共同类声明,以便您可以在代码中使用它们。与 .h 文件非常相似,但与语言无关。 .NET 等效项是程序集中的元数据。

问题是,无法使用该工具将 .tlb 声明转换为 C 声明。我相信您熟悉#import,这是在 MSVC 中使用的内容。但它会生成 C++ 代码、智能指针,帮助您创建 COM 对象、调用其接口(interface)方法和处理错误。如果有可用的工具生成 C,那么它就是一个隐藏得很好的 secret 。

想到一个技巧,可以使用OleView.exe、File + View TypeLib来查看类型库的内容。该 View 被反编译为 IDL,即接口(interface)定义语言。您可以将此文本复制并粘贴到 .idl 文件中,然后使用带有/header 命令行选项的 midl.exe 对其进行编译。这会生成一个 .h 文件,其中包含接口(interface)的 C++ 和 C 声明。应该让你接近,只需确保类型库相当稳定,这样你就不必经常这样做。

关于c# - 如何在 C 中使用 tlb 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4312711/

相关文章:

c# - 检查对象列表中的所有属性是否相等

c# - 如何使 Entity Framework 存储过程异步?

c - C 中的数组创建语法

wcf - 无法加载 DLL 'mqrt.dll'

c# - "Cannot resolve dependency to assembly"错误的原因

c# - 泛型问题

c# - 计算缩放级别以使图像适合面板

c - SymFromAddr 与给定地址的调试器符号不匹配

c - 杀死除系统进程和我自己的进程之外的所有进程

java - 如何将 win32com.dll 包含到 jar 文件中?