Ответ 1
Когда DLL зарегистрирована, вызывается точка входа метода DllRegisterServer
в вашей DLL. Аналогично, DllUnregisterServer
вызывается, когда DLL незарегистрирована.
Как описано в этой статье MSDN:
Поручает встроенному серверу создавать записи реестра для всех классы, поддерживаемые на этом сервере модуль. Если эта функция не работает, состояние реестра для всех его классы неопределены.
Для COM-библиотек вам нужно будет реализовать собственные методы точки входа DllRegisterServer
и DllUnregisterServer
, которые при необходимости регистрируют/отменяют регистрацию. Пример кода для DllRegisterServer
можно найти здесь.
Конечным результатом регистрации DLL является то, что все CLSID для компонентов в DLL зарегистрированы в HKEY_CLASSES_ROOT\CLSID
. Это позволяет CoCreateInstance
находить правильный сервер при создании объектов COM из другой DLL или приложения.
DllUnregisterServer
выполнит обратное и удалит все CLSID из реестра, которые были помещены туда DllRegisterServer
.
Более общую информацию о DllRegisterServer
можно найти здесь.