Python COM和windows DLL之间的关系是什么?

Python COM和windows DLL之间的关系是什么?,python,dll,com,ctypes,Python,Dll,Com,Ctypes,无意义的问题提醒 COM是DLL接口的一种类型,还是DLL是COM接口的一种类型 如果我使用CyType调用Python中的本地(不是.NET)C++ +DLL,是使用COM?< /P> COM是DLL接口的一种类型,还是DLL是COM接口的一种类型 是和否。COM本身与DLL导出无关,但它通常通过inproc服务器的一个或多个DLL入口点实现 在这种情况下,注册表保存一些簿记信息,以便可以找到DLL(不必命名为*.DLL),并且每当您通过实例化COM对象时,都可以隐式调用DllGetClass

无意义的问题提醒

COM是DLL接口的一种类型,还是DLL是COM接口的一种类型

如果我使用CyType调用Python中的本地(不是.NET)C++ +DLL,是使用COM?< /P> COM是DLL接口的一种类型,还是DLL是COM接口的一种类型

是和否。COM本身与DLL导出无关,但它通常通过inproc服务器的一个或多个DLL入口点实现

在这种情况下,注册表保存一些簿记信息,以便可以找到DLL(不必命名为
*.DLL
),并且每当您通过实例化COM对象时,都可以隐式调用
DllGetClassObject
入口点。因此,当您调用
CoCreateInstance
CoCreateInstanceEx
并给出CLSID/GUID时,幕后发生的事情是在注册表中查找已注册的COM类以找出机制(DLL就是其中之一)要使用DLL,则会调用函数
DllGetClassObject
来创建您请求的实例。理论上,您也可以手动完成所有这些操作。COM只是提供了一种很好的方法来隐藏血淋淋的细节,并在上面为您提供统一的抽象层

注意:COM DLL在Windows上是合适的DLL,但DLL通常与COM无关。DLL只提供了一种实现COM对象的方法—特别是针对COM InProc服务器

此类COM DLL中通常有四个函数:

  • DllCanUnloadNow
  • DllGetClassObject
  • DllRegisterServer
  • DllUnregisterServer

如果我使用CyType调用Python中的本地(不是.NET)C++ +DLL,是使用COM?< /P> 不。据我所知,Windows上的COM有单独的Python机制。看

编辑:COM与ActiveX


COM、ActiveX和OLE都是基本相同的底层机制的名称,但焦点最多略有改变(例如在ActiveX的情况下)。

Ok,因此windows dll是COM实现的一种形式。我想知道你能告诉我ActiveX是否/如何出现在这张图片中吗?@Sideshow Bob:我编辑了我的答案。当COM服务器通过DLL实现时,DLL实际上只是一种实现形式。另一个是进程外服务器及其扩展形式COM+,它跨机器工作。这就是COM和RPC混合的地方。。。