Что делает регистрация DLL? - PullRequest
59 голосов
/ 07 марта 2009

Я знаю, как зарегистрировать dll, но никогда не был уверен, зачем я это делаю или при каких условиях dll должна быть зарегистрирована. Может кто-нибудь объяснить или указать мне какую-то документацию?

Ответы [ 3 ]

44 голосов
/ 07 марта 2009

Когда DLL зарегистрирована, в вашей DLL вызывается точка входа метода DllRegisterServer. Точно так же DllUnregisterServer вызывается, когда DLL незарегистрированная.

Как описано в этой статье MSDN :

Указывает, что внутрипроцессный сервер создать свои записи реестра для всех классы, поддерживаемые на этом сервере модуль. Если эта функция не работает, состояние реестра для всех его классы не определены.

Для библиотек COM вам потребуется реализовать собственные методы точки входа DllRegisterServer и DllUnregisterServer, которые выполняют регистрацию / отмену регистрации соответствующим образом. Пример кода для DllRegisterServer можно найти здесь .

Конечным результатом регистрации DLL является то, что все CLSID для компонентов в DLL зарегистрированы под HKEY_CLASSES_ROOT\CLSID. Это позволяет CoCreateInstance найти правильный сервер при создании экземпляра COM-объектов из другой DLL или приложения.

DllUnregisterServer сделает обратное и удалит все CLSID из реестра, которые были добавлены туда DllRegisterServer.

Более общую информацию о DllRegisterServer можно найти здесь .

6 голосов
/ 07 марта 2009

Что чаще всего называют регистрацией DLL, так это когда она реализует COM-объект. regsvr32 гарантирует, что экземпляр объекта может быть создан. Например, когда VBScript использует New или CreateObject (), регистрация гарантирует, что COM знает, какую DLL загрузить, чтобы создать новый экземпляр, по имени или по CLSID.

См. "1003 *" объяснение непрофессионала " для (очень) краткого резюме.

1 голос
/ 07 марта 2009

Просто посмотрите исходный код regsvr32.exe

...