Регистрация реализации COM-интерфейса - PullRequest
2 голосов
/ 03 апреля 2009

Я новичок в программировании COM. У меня есть готовый к работе COM-объект (и связанный с ним IClassFactory), но я не могу понять, как выполнить регистрацию получаемой DLL для использования другими программами. Количество GUID, которые мне нужны, мне также неясно.

COM-объект, который я пытаюсь зарегистрировать, реализует интерфейс IAudioSessionEvents.

Я сталкивался с функциями DllRegisterServer и DllUnregisterServer, но я не нашел четких демонстраций их использования. С какими ключами они имеют дело, как они вызываются, чем, когда и т. Д.?

Спасибо
-Кевин Монтроз

Ответы [ 3 ]

3 голосов
/ 03 апреля 2009

Я не уверен из этого поста, реализуете ли вы или используете DLL, которая поддерживает IAudioSessionEvents. Если вы используете эту DLL, вы можете зарегистрировать компонент с помощью утилиты строки комментария regsvr32. Для регистрации используйте:

regsvr32

Чтобы отменить регистрацию:

regsvr32 / u

regsvr32 должен быть на вашем пути, поэтому эта команда будет работать из любого каталога.

Если вы реализуете рассматриваемую DLL, вы должны предоставить реализацию функций DllRegisterServer и DllUnRegisterServer. Эти функции должны настраивать и очищать записи реестра для вашего компонента. Целью записей реестра является предоставление ProgID, сопоставление его с CLSID и предоставление идентификатора интерфейса для интерфейсов, которые поддерживает компонент. Например, идентификатор интерфейса для IAudioSessionEvent. Если вы реализуете DLL, вам придется предоставить код для выполнения всех этих задач.

Примечание: эти функции вызываются regsvr32 для регистрации компонента.

Если на самом деле очень необычно писать этот код, обычно вы захотите использовать такую ​​среду, как ATL, которая позаботится о занятой работе для вас. Это хорошее упражнение - написать этот код хотя бы один раз, если вы действительно хотите знать COM с нуля.

3 голосов
/ 03 апреля 2009

Вам нужен один GUID для каждого класса, который вы представляете для COM, и один GUID для каждого нового интерфейса, который вы вводите и хотите сделать доступным через COM.

Сервер DllRegisterServer / DllUnregister вызывается, когда вы используете утилиту regsvr32 (поставляется с Windows) для регистрации ваших COM-выставленных классов. Он добавляет / удаляет ключи в ветке HKCR / CLSID для каждого класса, который вы открываете для COM. Эти ключи используются CoCreateInstance (), чтобы узнать, какую DLL загрузить для создания экземпляра класса с заданным GUID.

Если вы используете ATL или что-то подобное, обычно не нужно полностью реализовывать DllRegisterServer / DllUnRegisterServer, но используйте реализацию, предоставляемую библиотекой.

0 голосов
/ 03 апреля 2009

Часто самый простой способ реализовать саморегистрацию - это использовать классы сервера ATL, иметь глобальную переменную, которая наследуется от CComModule (или некоторого другого подобного класса) и определять COM_MAP в вашем модуле. Затем вы просите модуль com обработать регистрацию на основе файлов .rgs, которые вы добавили в свой проект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...