c++ - COM dll 优于 C++ dll

标签 c++ dll com

<分区>

如果我需要构建一个 dll 供 c++ 应用程序使用。 如果我去创建 COM dll,有什么好处或缺点(在性能方面或任何方面)。

我已经完成了这个LINK它没有很好地回答我的问题。

谢谢!

最佳答案

您发布的链接 (COM vs non-COM DLL) 中的答案解决了主要的相关问题。如果那个没有很好地回答我的问题,那么您应该考虑将问题的范围缩小一些。

除了已经在其他主题中触及的那些之外,还有一些注释。

  • (仅)其他 C++ 代码使用的 C++ DLL 可以公开完整的 C++ 接口(interface)。参见示例 Using dllimport and dllexport in C++ Classes : 您可以使用 dllimport 或 dllexport 属性声明 C++ 类。这些形式暗示整个类被导入或导出。

    相比之下,COM DLL只能发布COM接口(interface),语言中立,对C++不太友好。参见示例 What Is a COM Interface? .

  • 与前一点相关,DLL C++ 接口(interface)非常与使用它的任何 C++ 代码紧密耦合。除了极少数异常(exception),这意味着 DLL 和客户端代码都需要使用相同的编译器和相同的版本进行编译。此外,每当 DLL 导出类更改(包括 private 更改)时,可能需要重新编译所有客户端代码。

    相比之下,COM 接口(interface)是一个 ABI 契约 (What is Application Binary Interface (ABI)?),与客户端代码的耦合要松散得多。从本质上讲,只要发布的接口(interface)不变,DLL 代码就可以随意更改,而无需客户端重新编译。

就性能而言,如果没有很多更多细节,就进行比较还为时过早,不可能进行二次猜测。 C++COM 接口(interface)具有截然不同的语义和功能。

关于c++ - COM dll 优于 C++ dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38549003/

相关文章:

c++ - 如何在 CppUnit 中漂亮地打印 STL 数据结构?

C++ 错误 C2600 : Cannot define a compiler-generated special member function (must be declared in the class first)

我可以通过检查 DLL 本身来判断使用哪个版本的 Visual Studio 来构建 DLL

c++ - 我想从 Python 调用 Windows C++ 函数 WinHttpGetProxyForUrl - 这可以做到吗?

.net - 为暴露给 COM 的 .NET 类定义接口(interface)有什么好处?

c++ - ATL CComPtr 附加、分离和析构函数

c++ - 是否可以拦截来自另一个进程的控制台调用?

c++ - STL 友好的 pImpl 类?

dll - 将多个 native DLL 合并为一个 DLL

c++ - 在哪里为 dll 导出创建预处理器指令?