Как мне зарегистрировать 32-битный COM-сервер ATL out-proc, чтобы сделать его доступным из 64-битных программ? - PullRequest
2 голосов
/ 17 ноября 2010

У нас есть 32-битный выходной COM-сервер ATL.Чтобы зарегистрироваться в реестре, он вызывает CComModule::UpdateRegistryFromResource() и передает идентификатор файла .rgs, скомпилированного в ресурсы того же исполняемого файла.

Отлично работает на 32-битных системах, но не на 64-битовые.Очевидно, что при запуске 32-разрядного .exe в 64-разрядной Windows его доступ к реестру перенаправляется, и поэтому он регистрируется в «32-разрядном HKCR», поэтому 64-разрядные программы не видят его регистрации.* Как зарегистрировать тот же сервер out-proc в 64-битном HKCR самым дешевым и надежным способом?

1 Ответ

0 голосов
/ 17 ноября 2010

Насколько я могу судить / помнить, вам не нужно делать ничего особенного.

Я проверил 32-битный ATL COM EXE-сервер, который я написал специально для вызова из 64-битного кода (http://www.pretentiousname.com/adobe_pdf_x64_fix/index.html), и регистрационный код является полностью стандартным (если я не забыл и сегодня не могу что-то увидеть Я должен был изменить).

Если код 64-битной стороны, вызывающий CoCreateInstance (Ex), специально не передает CLSCTX_ACTIVATE_64_BIT_SERVER, COM должен автоматически проверять 32-битный реестр, если это необходимо. (Даже если CLSCTX_ACTIVATE_64_BIT_SERVER пройден, он все равно может это сделать. MSDN не совсем ясно, является ли этот флаг предпочтением или требованием. Я предполагаю, что он все равно не передается.)

Возможно, проблема не в том, как зарегистрирован COM-сервер, а в чем-то другом. Или, может быть, зарегистрирована поврежденная 64-битная версия сервера, может быть, из более ранней стадии разработки / тестирования, которая выбрана на 32-битном сервере и не работает?

Кстати, есть различия в том, какие разделы реестра разделены на 32/64-битные в Windows 7 по сравнению с более ранними версиями ОС, но я знаю по опыту, что вам не нужно делать ничего особенного в Vista, Windows 7 и Server 2008 R2. Я лично не тестировал другие версии ОС (например, XPx64).

...