Re: IConnectionPoints & MFC
От: AlexeyAA Россия  
Дата: 05.04.02 09:46
Оценка:
Здравствуйте Sphinx, Вы писали:

S>Добрый всем день.


S>Не подскажете такой вопрос: необходимо подключиться к COM-объекту из MFC-класса.

S>Sphinx.

Посмотрите статью http://www.rsdn.ru/article/?mfc/connpts.xml
Автор(ы): Евгений Щербатов
Дата: 18.04.2001

Статья посвящена технологии Connection Points в программах на MFC. Автор кратко описывает сущность и назначение этой технологии, а затем демонстрирует создание COM-клиента и COM-сервера на базе MFC с её использованием.
"Добавление технологии Connection point в приложение на базе библиотеки MFC", в которой автор решает проблему, похожую на вашу. С той лишь разницей, что в статье рассматривается in-proc — сервера, а в вашем случае, если я правильно понял, речь идет о EXE-сервере. Спешу обрадовать, что код, приведенный в вашем примере, абсолютно верный. Собака зарыта в том, что необходимо зарегистрировать в системе ваш Event-овый интерфейс. В случае DLL-сервера эта регистрация делается автоматически при запуске regsvr32. А в вашем случае это потребует некоторых усилий:
В каком-либо месте программы (У меня в InitInstance() класса приложения) вставьте следующее:

HKEY key;

// Open HKEY_CLASSES_ROOT
RegOpenKey(HKEY_CLASSES_ROOT, _T("Interface"), &key);

// Set up the key
RegSetValue( key, _T("{IID вашего интерфейса}"), REG_SZ, _T("Имя вашего интерфейса"), 0);

RegSetValue( key, _T("{IID вашего интерфейса}\\ProxyStubClsid"), REG_SZ,
_T("{00020420-0000-0000-C000-000000000046}"), 0);

RegSetValue( key, _T("{IID вашего интерфейса}\\ProxyStubClsid32"), REG_SZ,
_T("{00020420-0000-0000-C000-000000000046}"), 0);

RegSetValue( key, _T("{IID вашего интерфейса}\\NumMethods"), REG_SZ,
_T("7"), 0);

RegSetValue( key, _T("{IID вашего интерфейса}\\BaseInterface"), REG_SZ,
_T("{00020400-0000-0000-C000-000000000046}"), 0);

RegCloseKey(key);

IID интерфейса берется из .ODL файла.

У меня получилось, надеюсь, что и у Вас получиться.

С наилучшими пожеланиями.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.