【问题标题】:How to call a COM component in C如何在 C 中调用 COM 组件
【发布时间】:2015-07-27 05:51:43
【问题描述】:

我必须在 Visual Studio 中从 C 调用 COM 组件。我可以通过指定 .tlb 文件使用“#import”指令从Visual C++ 调用它。但是我在 C 语言中看不到#import 指令。有没有我可以使用的替代方法?

我不能用 C++ 编写,因为我只能用纯 C 创建模块。

【问题讨论】:

  • How to use tlb file in C?的可能重复
  • 有什么原因不能在你的模块中使用 C++。不应该有任何兼容性问题。
  • 我必须开发的模块必须是 C 语言,因为这个 c 模块又必须集成到旧版 ERP 产品 UNify Vision 中

标签: c com


【解决方案1】:

好的,你应该(简单地说):

  1. 如果您想调用从 .NET 创建的 COM,那么您应该以正确的方式准备这些类(GUID、ComVisible 等)
  2. 为 C 生成适当的标头(OleView.exe 可以做到)
  3. 在 C 中使用这些存根文件来调用 ctor、属性、方法等。

这是您问题的完整分步解决方案: http://www.codeproject.com/Articles/632616/How-to-use-NET-Csharp-COM-objects-in-plain-C

【讨论】:

【解决方案2】:

该组件中的类型库可能来自 MIDL 编译的 IDL 文件。 MIDL 生成三个文件 - .tlb、.c 和 .h。 .c 和 .h 文件包含 C C++ 的接口定义 - 有大量 #ifdef __cplusplus 提供相同的定义 - 一组用于 C,另一组用于 C++。

您必须获取这些 .c 和 .h 文件并将其包含到您的项目中。如果您有 COM 组件源 - 在构建组件后获取这些文件。如果它是由第三方提供的,请联系他们并要求他们发布这些文件。

【讨论】:

  • 感谢您的回复。我有几个问题。你能澄清一下吗? COM 组件是内部开发的.Net 组件。那么我可以在 .tlb 文件上使用 MIDL 来生成 .h 和 .c 文件吗?另外,我需要做任何额外的链接还是编译器会自动链接注册表中注册的所需 COM?。
  • @sveerap:我认为它不可能是 .NET 组件。我想在这种情况下你不走运。我描述的方法只有在你有一个 .idl 文件并用 MIDL 编译它时才有效。您仍然可以尝试使用此处描述的技术:stackoverflow.com/questions/4312711/how-to-use-tlb-file-in-c/…,但这会非常痛苦。
  • @sharptooh :您建议的方法有效。我可以创建一个从 C 到 C# 通信的示例 hello world 应用程序。我从 .tbl 文件 usign oleviewer 生成了 IDL,然后使用 MIDL 生成了 .h 和 .c 文件。在项目中使用它们,我可以成功运行它。下面的链接提供了这方面的帮助。 faculty.cascadia.edu/mpanitz/com_tutorial/comclientinc.html
  • @sveerap:太好了!我没有考虑按顺序执行这些步骤,主要是因为一旦组件界面发生更改,您就必须重做它们,这不是很方便。很好,对你有用。
猜你喜欢
  • 2010-10-30
  • 2013-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 2014-10-14
  • 2015-02-22
  • 1970-01-01
相关资源
最近更新 更多