Здравствуйте 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 файла.
У меня получилось, надеюсь, что и у Вас получиться.
С наилучшими пожеланиями.