DLL在Windows中有很多用途。许多类型的库代码都存储在DLL中。例如,其中一个是.net程序集,这是一个不同的野兽。
COM DLL并不比“普通二进制PE DLL”更好,因为COM DLL 也是普通DLL。使DLL成为COM DLL的原因是,除了其他事情外,可能还会公开某些与某个契约(签名)[查找条目IUnknown]相匹配的导出,甚至还有几种标准化的接口[lookup entry'dual interface']只能实例化DLL中的特定对象,还能自动发现服务,包括函数名称和参数类型。
双接口,使它非常方便的链接到脚本语言(在网络中使用,shell脚本,教育计划等),因为脚本程序员不关心严格类型。由COM DLL公开的双重接口允许脚本运行时精确地查询它期望的类型,并无缝地向用户进行适当的强制转换。这种灵活性允许构建一个完整的巨大COM基础设施,包括组件注册,DCOM(网络调用)等。它使得将COM接口提供到Windows组件(例如WMI)和办公室组件。 COM之上实现了许多其他常用接口,如ADO。
这一切都很好,但COM在任何意义上都不“占上风”。 COM DLL是少数的DLL。普通的DLL和.NET DLL非常流行。微软认为.net接口优于COM。许多unix怪胎和其他人认为dll是一个坏主意,因为它不提供运行时链接服务,这与unix共享对象总是有同样的意义。尽管是Windows开发人员,但我也认为SO提供了一个更好的选择,我希望只有一次。
是什么让你觉得COM盛行?如果更多的DLL是经典的'c'DLL而不是COM DLL,我不会感到惊讶。 – 2010-06-10 17:16:56
感谢您的评论。也许我错了。但是,似乎许多Windows功能都是基于COM构建的,比如ActiveX,OLE,甚至.NET也构建为COM服务器的集合。所以我得出了这个结论。 – smwikipedia 2010-06-11 03:29:51