Я пишу для COM-сервера (x86) оболочку на основе суррогата DLL (x64), описанного как здесь , чтобы получить доступ от 64-битного клиента.
Iзарегистрировал COM-сервер (x86) и Proxy / Stub-DLL (x86), и они зарегистрировались в узлах WOW6432.
Но когда я вызываю экземпляр с
IShellServerx86* pShellServer = NULL;
::CoCreateInstance(__uuidof(CShellServerx86), NULL, CLSCTX_LOCAL_SERVER |
CLSCTX_ACTIVATE_32_BIT_SERVER, __uuidof(IShellServerx86),
(void**)&pShellServer);
,dllhost.exe запущен, и я возвращаюсь "Класс не зарегистрирован".Когда я анализирую dllhost.exe (x86-версия!) С помощью procmon, я вижу, что dllhost.exe пытается найти пути в 64-битном реестре, а не в WOW6432-узлах.
Я пыталсячтобы дублировать записи реестра в 64-битные пути, но затем я получаю "% 1 не является приложением WIN32".
Как я могу COM искать в 32-битных путях?Не достаточно ли флага "CLSCTX_ACTIVATE_32_BIT_SERVER"?
Спасибо за вашу помощь заранее.
Тобиас
РЕДАКТИРОВАТЬ:
Я нашел на MSDN эта статья, рассказывающая, что в Windows 7 отключено отображение реестра?Говорят, что все идентификаторы CLSID, содержащие ключ InprocServer32, не отражаются.Но как тогда я могу достичь отражения, когда использую Системный Суррогат?