c++ - COM exe、C++ 和 MinGW

标签 c++ windows com mingw-w64

有一个奇怪的问题;我正在使用一家大公司提供的工具,出于我觉得有些莫名其妙的原因,它使用了在 exe 本身内部定义的 COM 接口(interface)。在他们提供的示例代码中,它看起来有点像这样。

#import "C:\\Path_To_Exe\\the.exe"rename_namespace ("exe_namespace");

据我所知,这是 Microsoft Visual C++ 编译器理解 COM 并使用它的方式,并且我以前有过示例代码(目前,由于我的构建环境摆弄,它无法编译)。

我的问题是,有没有办法对 MinGW 做同样的事情?我正在从事的项目主要使用它;如果需要,我们可以使用 MSVC,但我希望尽可能避免使用多个编译器。我目前正在使用 cmake 进行构建,但如果需要,我愿意使用脚本来构建需要 COM 接口(interface)的项目。

感谢您的宝贵时间。

最佳答案

“有没有办法用 MinGW 做同样的事情”的答案是否定的。 #import 是一个可选工具,它读取 COM type library (无论是否嵌入二进制文件,TLB 通常对应于一个 .idl 文件,但这也是可选的),并生成严重依赖于只有 Visual Studio 提供的 .c 和 .h 文件的 C/C++ 代码。

“我可以用 MinGW 做 COM”的答案当然是肯定的。我不太了解 MinGW 和工具,但是您可以使用任何编译器来处理 COM,因为 COM(只是)一个 binary standard .

如果去掉#import,则必须更改使用生成内容的代码(在#import 指令生成的 .TLH 文件中)、COM 帮助器、包装器等。它可能有很多的工作,但在技术上是可行的。

现在,在您的上下文中,我想这实际上取决于 .exe 的类型库(您的 COM 类、接口(interface)等的描述)有多大。 Visual Studio 的#import 增加了值(value),因此您必须评估它为您增加了多少值(value)。

如果它只是一个类,例如一个接口(interface),那么去掉#import 可能会很有趣。如果 .exe 已经有与 tlb 对应的 .h 文件,那么您可以使用它们,否则您将不得不自己重新声明一些(并且再次更改使用生成的包装器的代码)。

你问这个问题的唯一事实让我想知道你是否有足够的 COM 知识(无意冒犯 :-) 来摆脱 Visual Studio。

关于c++ - COM exe、C++ 和 MinGW,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45969375/

相关文章:

c++ - 将源代码从 window 转换为 linux

c++ - 神经网络在用于处理数据之前似乎工作正常(所有结果几乎相同)

c++ - RGB 到十六进制语法

c++ - 如何关闭使用 SHCreateStreamOnFile 打开的文件句柄

com - 在哪里可以找到 COM dll?

c# - 正在注册的类(class)上获取类(class)未注册 80041054

c++ - 在 Linux 上编译的程序没有在#ifdef 部分获取代码

c++ - 从 RAM 驱动器构建真的会提高速度吗?

windows - 两个页面条目引用同一个物理页面

windows - 从 Git 存储库获取文件