Out-of-Proc-COM-сервер (x86): dllhost.exe ищет неправильный путь реестра - PullRequest
1 голос
/ 11 августа 2011

Я пишу для 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, не отражаются.Но как тогда я могу достичь отражения, когда использую Системный Суррогат?

...