2012-01-10 66 views
2

与来自.NET的本机DLL相比,使用COM库有什么优势。COM与本机DLL

我看到的一个原因是我不需要为COM库定义方法签名(与P/Invoke的DllImport相比)。还有其他人吗?

+0

通常是因为它们已经存在。 – 2012-01-10 06:22:15

+1

我不会称为托管的.NET程序集“原生” – 2012-01-10 06:23:46

+0

@MitchWheat,对我来说也是一样 – SiberianGuy 2012-01-10 17:03:34

回答

4

您可以创建一个COM对象模型,东西是不可能的PInvoke。与支持方法,属性和事件的.NET类非常相似。一个很好的例子是Office互操作命名空间(如Microsoft.Office.Interop.Excel),在Office端以纯COM方式实现。

请注意,高度可用的COM库使用COM自动化,这是COM的一个子集,旨在使不同语言之间的互操作变得非常简单。但是它会对方法声明中可以使用的类型施加严格的限制。

用C++编写COM代码并不是特别容易,尽管ATL和内置的Visual Studio向导可以提供很多帮助。请考虑使用C++/CLI语言。得益于语言内置的互操作支持,开始更容易。

1

如果你的意思是从互操作的角度来看COM DLL和本地(非托管)DLL的差异,我会说COM服务器(DLL/EXE)更自然地映射到.Net代码风格(我的意思是,它们看起来类似于.Net世界中的对象)。从开发人员的角度来看(需要决定何时与COM或本地“原始”DLL),我会说COM允许你有更好的功能分组(接口)(当然COM有更多提供 - 例如,属性,事件等

只是我的0,02;)

最佳