2011-12-12 94 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

相关问题