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