Какая связь между COM и библиотеками Windows? - PullRequest
4 голосов
/ 12 декабря 2011

Предупреждение о пустом вопросе.

Является ли COM одним типом интерфейса DLL или DLL является одним из типов интерфейса COM?

Если я вызываю Native (не .net) C ++ DLL из Python с использованием ctypes, это с помощью COM?

1 Ответ

4 голосов
/ 12 декабря 2011

Является ли COM одним типом интерфейса DLL, или DLL является одним из типов интерфейса COM?

Да и нет. Сам по себе COM не имеет ничего общего с экспортом DLL как таковым, но он часто реализуется через одну или несколько точек входа DLL для серверов inproc.

В этом случае в реестре хранится некоторая бухгалтерская информация, позволяющая найти библиотеку DLL (имя которой не обязательно должно именоваться *.dll), а точка входа DllGetClassObject может быть неявно вызвана при каждом создании экземпляра COM. объект через. Поэтому, когда вы вызываете CoCreateInstance или CoCreateInstanceEx и даете CLSID / GUID, то, что происходит за кулисами, заключается в том, что зарегистрированные реестры COM ищутся в реестре, чтобы выяснить механизм (из которых DLL), а затем в случае DLL будет вызвана функция DllGetClassObject для создания запрошенного вами экземпляра. Теоретически вы можете делать все это и вручную. COM просто предоставляет хороший способ скрыть кровавые детали и предоставить вам этот унифицированный уровень абстракции сверху.

Примечание: DLL-библиотеки COM являются собственными DLL-библиотеками для Windows, но библиотеки DLL вообще не имеют ничего общего с COM. Библиотеки DLL предоставляют только один способ реализации COM-объектов - особенно для серверов COM InProc.

Часто в такой COM DLL есть четыре функции:

  • DllCanUnloadNow
  • DllGetClassObject
  • DllRegisterServer
  • DllUnregisterServer

Если я вызываю Native (не .net) C ++ DLL из Python с использованием ctypes, это с помощью COM?

Нет. Насколько мне известно, существуют отдельные механизмы Python для COM на Windows. См. здесь .

Редактировать: COM против ActiveX

COM, ActiveX и OLE - это имена, по сути, одних и тех же базовых механизмов с максимально слегка измененным фокусом (например, в случае ActiveX).

...