COM dll over C++ dll
COM dll over C++ dll
如果我只需要构建一个dll以供c++应用程序使用。如果我创建COM dll,有什么好处或缺点(在性能或任何方面)。
我已经浏览了这个链接,它没有很好地回答我的问题。
谢谢!
您发布的链接中的答案(COM与非COM DLL)解决了主要的相关问题。如果是didn't answer my question well
,那么你应该考虑更狭义地界定问题。
除了在另一个主题中已经提到的注释之外,还有几条注释。
-
(仅)被其他C++代码使用的C++DLL可以公开完整的C++接口。请参见例如在C++类中使用dllimport和dllexport:
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++不太友好。请参见"什么是COM接口?"。 -
与前一点相关,DLL C++接口与使用它的任何C++代码都是非常紧密耦合的。除了极少数例外,这意味着DLL和客户端代码都需要使用相同的编译器及其版本进行编译。此外,每当DLL导出的类发生更改(包括
private
更改)时,可能需要重新编译所有客户端代码。相反,COM接口是ABI合约(什么是应用程序二进制接口(ABI)?)与客户端代码的耦合要松散得多。本质上,只要发布的接口不更改,DLL代码就可以随意更改,而无需重新编译客户端。
就性能而言,如果没有更多细节,进行比较还为时过早,也不可能进行事后猜测。C++
与COM
接口具有截然不同的语义和功能。
- 挂起和取消挂起一个文件DLL
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- C++:将外部库链接到dll库
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 不同的Visual Studio版本中缺少.dll
- 从DLL中删除类的实例
- 如何包装第三方DLL在R中使用
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- Python ctypes:不会按预期加载 dll
- 在 C++/CLI 中将 .NET 事件从一个 DLL 引发到另一个 DLL