【问题标题】:Is there a way to use/call COM interfaces in C?有没有办法在 C 中使用/调用 COM 接口?
【发布时间】:2016-11-21 21:07:38
【问题描述】:

MSDN 提到C语言也可以用来创建和使用COM对象。

我通过 CodeProject here 发现相关的头文件被创建并且它们将被包含在调用这些 COM 接口的任何 C 应用程序中。

所有来自 Windows 的 COM 对象都会有类似的相关头文件吗?

或者还有其他方法可以从 C 调用 COM 接口吗?

【问题讨论】:

  • 如果正确构建,可能由接口定义语言编译器 (MIDL) 构建,那么是的,会有相应的 C 接口定义。你已经在正确的轨道上。并且仅供参考,来自 C 的 COM 是一个 f'ing 痛苦,但它仍然是可行的。
  • COM 设计可以从 C 中调用。如果缺少相应的头文件,您将不得不手动重建 lpVtbl。条目按照它们声明的顺序排序,基本接口在前。
  • 有可能,但是这种做法被《日内瓦程序员权利公约》禁止。我们在这里订阅它,当您遇到麻烦时,您很少会得到有用的帮助。你会遇到麻烦的。

标签: c windows com


【解决方案1】:

所有来自 Windows 的 COM 对象都会有类似的相关头文件吗?

使用MIDL compilerMicrosoft Interface Definition Language 文件生成的所有头文件都将包含供C 程序使用的定义。见C/C++-Compiler Considerations:

生成的 .h 文件具有 C 风格和 C++ 风格的接口定义。

我不知道 Windows 或 Windows SDK 附带的 所有 COM 对象是否带有预构建的头文件供 C 程序使用,但假设是这样肯定是合理的。如果您发现没有 C 样式接口定义的接口,您始终可以针对 .idl 文件运行 MIDL 编译器。

或者有没有其他方法可以从 C 调用 COM 接口?

一些 COM 接口实现也以type libraries (.tlb) 的形式出现。您可以将 TLB #import 放入您的 C++ 代码中。这会生成一个主头文件 (.tlh),您可以使用它来重构 C 风格的接口定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-02
    • 2014-07-02
    • 2010-10-03
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多