То, что я знаю до сих пор. COM создает объект на основе его clsid. Это руководство, которое однозначно идентифицирует этот класс.
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
Этот класс затем используется для создания объектов. Теперь COM должен знать, где находится DLL, которая содержит COM-объект. В моем конкретном случае «сервер», который предоставляет объект COM, является DLL и будет «in process». Затем указать COM к этому DLL «в процессе», добавив:
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\InprocServer32
(default) = "c:\foo\myActiveX.ocx"
COM также должен знать потоковую модель, которая поддерживает объект COM-сервер. Самый простой, самый распространенный и один используемый в этом примере является «квартира» потоковая модель:
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\InprocServer32
(default) = "c:\foo\myActiveX.ocx"
ThreadingModel = "Apartment"
Следующая является ProgID. Это похоже на то, как DNS используется для превращения дружественного имени в IP. Здесь мы переходим дружественное имя "MyCoolLibrary.MyCoolControl"
в уродливый CLSID "{AE8530CF-D204-4877-9CAB-F052BF1F661F}"
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\InprocServer32
(default) = "c:\foo\myActiveX.ocx"
ThreadingModel = "Apartment"
HKEY_CLASSES_ROOT
\MyCoolLibrary.MyCoolControl
\Clsid
(default) = "{AE8530CF-D204-4877-9CAB-F052BF1F661F}"
Теперь кто-то может попросить
MyCoolLibrary.MyCoolControl
и COM может превратить это в ClassID
{AE8530CF-D204-4877-9CAB-F052BF1F661F}
После COM имеет clasid, он может посмотреть в реестре под HKCR\Clsid\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
, чтобы найти настоящую информацию.
Для удовольствия, то ProgID добавляется в раздел CLSID, просто чтобы люди могли иметь некоторое представление о том, что этот класс является:
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\InprocServer32
(default) = "c:\foo\myActiveX.ocx"
ThreadingModel = "Apartment"
\ProgID
(default) = "MyCoolLibrary.MyCoolControl"
HKEY_CLASSES_ROOT
\MyCoolLibrary.MyCoolControl
\Clsid
(default) = "{AE8530CF-D204-4877-9CAB-F052BF1F661F}"
Следующая является библиотека типов. Это в основном un важно для чего-либо в процессе, но если объект COM находится в другой «квартире», тогда параметры функции должны быть упорядочены. COM делает это автоматически для вас, если у него есть библиотека типов, которая определяет все методы классов.
CLSID раздел направлен на соответствующую библиотеку типов с добавлением ключа TypeLib:
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\InprocServer32
(default) = "c:\foo\myActiveX.ocx"
ThreadingModel = "Apartment"
\ProgID
(default) = "MyCoolLibrary.MyCoolControl"
\TypeLib
(default) = "{17A5A3D4-439C-4C2A-8AB4-749B7771CDE1}"
HKEY_CLASSES_ROOT
\MyCoolLibrary.MyCoolControl
\Clsid
(default) = "{AE8530CF-D204-4877-9CAB-F052BF1F661F}"
Информация об этой библиотеке типов также хранится в реестре, но добавление этих ключей делается для нас с звонок по телефону RegisterTypeLib. Но это добавит ключей для нас похожих на:
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\InprocServer32
(default) = "c:\foo\myActiveX.ocx"
ThreadingModel = "Apartment"
\ProgID
(default) = "MyCoolLibrary.MyCoolControl"
\TypeLib
(default) = "{17A5A3D4-439C-4C2A-8AB4-749B7771CDE1}"
HKEY_CLASSES_ROOT
\MyCoolLibrary.MyCoolControl
\Clsid
(default) = "{AE8530CF-D204-4877-9CAB-F052BF1F661F}"
HKEY_CLASSES_ROOT
\TypeLib
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\1.0
(default) = "My Cool ActiveX Library"
...
Теперь мы получаем в хитрые вещи, вещи, которые необходимы для надеюсь, сделать работу управления ActiveX.
An MSDN article states, что вы должны добавить фиктивный Программируемый ключ, чтобы указать, что элемент управления ActiveX:
HKEY_CLASSES_ROOT
\Clsid
\{AE8530CF-D204-4877-9CAB-F052BF1F661F}
\Programmable
Но this MSDN Library page говорит ключевое слово управления, а не Программируемая - и есть нет программируемого ключа.
Но это не мешает некоторым элементам ActiveX использовать Control, некоторые - с помощью Programmable, а некоторые - с использованием обоих.
Я не могу найти ничего, что бы требовало.
Итак, может ли кто-нибудь найти определенную документацию?
Я COM-разработчик, новичку один. У меня такой же вопрос. Я хотел бы поделиться с вами [этим] (http://ewall.org/index.php?module=ContentExpress&func=print&ceid=22). – smwikipedia
Не большинство фреймворков автоматизирует создание этого для вас? – Deanna