与.NET中的本机DLL相比,使用COM库有什么好处。
我看到的一个原因是我不需要为COM库定义方法签名(与P / Invoke的DllImport相比)。还有其他人吗?
答案 0 :(得分:4)
您可以在COM中创建对象模型,这是pinvoke无法实现的。与支持方法,属性和事件的.NET类非常相似。一个很好的例子是Office互操作命名空间(如Microsoft.Office.Interop.Excel),在Office端的纯COM中实现。
请注意,像这样的高可用性COM库使用COM自动化,这是COM的一个子集,旨在使不同语言之间的互操作非常容易。但是它对可以在方法声明中使用的类型类型施加了严格的限制。
用C ++编写COM代码并不是特别容易,尽管ATL和内置的Visual Studio向导可以提供很多帮助。请考虑使用C ++ / CLI语言。由于语言中内置的互操作支持,因此更容易上手。
答案 1 :(得分:1)
如果你的意思是来自互操作角度的COM DLL和本机(非托管)DLL的差异我会说COM服务器(DLL / EXE)更自然地映射到.Net代码样式(我的意思是,它们看起来像.Net世界中的对象。)
从开发人员的角度来看(需要决定何时使用COM或本机“原始”dll)我会说COM允许你有更好的功能分组(接口)(当然COM有更多提供 - 例如,财产,事件等。
只是我的0,02;)
最佳