空问题警报。COM和windows dll之间有什么关系?
COM是DLL接口的一种类型,还是DLL是COM接口的一种类型吗?
如果我使用ctypes从Python调用Native(而不是.net)C++ DLL,那是使用COM吗?
空问题警报。COM和windows dll之间有什么关系?
COM是DLL接口的一种类型,还是DLL是COM接口的一种类型吗?
如果我使用ctypes从Python调用Native(而不是.net)C++ DLL,那是使用COM吗?
COM是DLL接口的一种类型,还是DLL是COM接口的一种类型吗?
是和否。每个COM与DLL导出本身无关,但它通常通过一个或多个inproc服务器的DLL入口点来实现。
在这种情况下,注册表包含一些簿记信息,以便可以找到DLL(不必命名为*.dll
),并且无论何时通过实例化COM对象,都可以隐式调用入口点。因此,当您拨打CoCreateInstance
或CoCreateInstanceEx
并给出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中的情况下)相同的基本机制的所有名字。
好,所以windows DLL是COM实现的一种形式。我不知道你能否告诉我这个图像是否有ActiveX? –
@Sideshow Bob:我编辑了我的答案。当一个COM服务器通过一个实际上只是一个实现形式的DLL实现时。另一个是进程外服务器,它的扩展形式是COM +,它可以跨机器运行。这就是COM和RPC混合的地方...... – 0xC0000022L