【问题标题】:COM dll over C++ dll [closed]COM dll over C++ dll [关闭]
【发布时间】:2016-07-24 05:21:57
【问题描述】:

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

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

谢谢!

【问题讨论】:

  • 如果您的 DLL 只在一个程序中使用,只需静态链接即可。
  • 你会很容易地发现缺点。 COM 的主要好处是语言和运行时独立性。如果它是用 C++ 编写的并且仅在 C++ 程序中使用,这听起来不像是一个很大的功能。但实际上,C++ 没有 ABI。您可以使用任何 C++ 编译器构建的程序中的 DLL,使用任意编译选项。您不会立即从中受益,只有稍后才能受益。

标签: c++ dll com


【解决方案1】:

您发布的链接 (COM vs non-COM DLL) 中的答案解决了主要的相关问题。如果是didn't answer my question well,那么您应该考虑更狭隘地提出问题。

除了已经在其他主题中提到的那些之外,还有几个注释。

  • (仅)由其他 C++ 代码使用的 C++ DLL 可以公开完整的 C++ 接口。参见例如Using dllimport and dllexport in C++ Classes:You can declare C++ classes with the dllimport or dllexport attribute. These forms imply that the entire class is imported or exported.

    相比之下,COM DLL 只能发布COM 接口,这些接口是语言中立的,对 C++ 不太友好。例如见What Is a COM Interface?

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

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

就性能而言,如果没有很多更多细节,现在比较还为时过早,也不可能事后预测。 C++COM 接口具有截然不同的语义和功能。

【讨论】:

    猜你喜欢
    • 2015-02-22
    • 2013-06-21
    • 2011-07-27
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多