2011-12-12 84 views

回答

4

COM是DLL接口的一種類型,還是DLL是COM接口的一種類型嗎?

是和否。每個COM與DLL導出本身無關,但它通常通過一個或多個inproc服務器的DLL入口點來實現。

在這種情況下,註冊表包含一些簿記信息,以便可以找到DLL(不必命名爲*.dll),並且無論何時通過實例化COM對象,都可以隱式調用入口點。因此,當您撥打CoCreateInstanceCoCreateInstanceEx並給出CLSID/GUID時,幕後會發生什麼:在註冊表中查找已註冊的COM類以找出要使用的機制(其中的DLL是一個),然後在DLL函數DllGetClassObject將被調用來創建您請求的實例。理論上你也可以手動完成所有這些。 COM只是提供了一個很好的方式來隱藏血淋淋的細節,併爲您提供統一的抽象層。

注意: COM DLLs是Windows上正確的DLL,但DLL通常與COM無關。 DLL只提供一種實現COM對象的方法 - 專門用於COM InProc服務器。

經常有這樣的COM DLL四個功能:

  • DllCanUnloadNow
  • DllGetClassObject
  • DllRegisterServer
  • DllUnregisterServer

如果我調用本機(不是。淨)C++ Python使用ctypes的DLL,是使用COM?

不,據我所知,在Windows上有單獨的Python機制。見here

編輯: COM VS的ActiveX

COM,ActiveX和OLE是基本上與至多一個稍微改變聚焦(例如ActiveX中的情況下)相同的基本機制的所有名字。

+0

好,所以windows DLL是COM實現的一種形式。我不知道你能否告訴我這個圖像是否有ActiveX? –

+0

@Sideshow Bob:我編輯了我的答案。當一個COM服務器通過一個實際上只是一個實現形式的DLL實現時。另一個是進程外服務器,它的擴展形式是COM +,它可以跨機器運行。這就是COM和RPC混合的地方...... – 0xC0000022L

相關問題