C# 从C访问COM对象的最佳方法

C# 从C访问COM对象的最佳方法,c#,.net,com,pinvoke,C#,.net,Com,Pinvoke,我计划使用作为COM对象公开的各种对象。为了使它们更易于使用,我想将它们包装为C对象。最好的方法是什么?您可以首先导入引用。如果需要更多控制或从VS的导入中获取错误,可以在windows sdk中使用tlbimp。这将创建互操作程序集。您可以从元数据中获取类定义 编辑:如果要使用64位,这实际上要复杂得多。如果库已注册,则可以执行以下步骤让Visual Studio为您生成互操作程序集: 打开您的VisualStudio项目。 右键单击解决方案资源管理器中项目下方的“引用”,然后选择“添加引用”

我计划使用作为COM对象公开的各种对象。为了使它们更易于使用,我想将它们包装为C对象。最好的方法是什么?

您可以首先导入引用。如果需要更多控制或从VS的导入中获取错误,可以在windows sdk中使用tlbimp。这将创建互操作程序集。您可以从元数据中获取类定义


编辑:如果要使用64位

,这实际上要复杂得多。如果库已注册,则可以执行以下步骤让Visual Studio为您生成互操作程序集:

打开您的VisualStudio项目。 右键单击解决方案资源管理器中项目下方的“引用”,然后选择“添加引用”。 选择COM选项卡。如果看不到这一点,则说明项目类型不支持COM。 选择要与之互操作的组件。 选择“确定”。 这将是一个类或一组C类,用普通的C类包装所有COM接口内容。然后您就可以像其他C库一样使用它。如果引用的导入工作正常,您可以像其他任何引用一样对其进行探索,并且方法/结构/类/常量应该显示在该命名空间和intellisense中


这至少会让你开始。如果这是部署在企业环境或您可以控制的环境中,这可能就是您所需要的。

Mads Torgersen,C语言产品经理在上一篇关于C的播客中说,他们添加了或正在添加某些功能,以简化与COM的互操作。如果我能记住它是什么…我想你指的是C4.0中的“动态”变量类型。这个新的关键字使它变得更容易,但C已经可以了。为什么它更难或不同?只需使用x64.Net工具集中的tlbimp,我猜任何使用32位体系结构的依赖程序集都可以。我知道使用32位编译的COM互操作程序集的64位版本的应用程序不起作用,反之亦然。我一直认为x64可以运行任何一种体系结构,但事实显然并非如此。