64-битный COM (ActiveX) сервер - PullRequest
4 голосов
/ 22 декабря 2010

У меня есть exe-сервер activex, который прекрасно собирался и регистрировался на 32-битной ОС. Я хотел сделать 64-битную версию этого exe-файла, обновив проект до Visual Studio 2010 и изменив платформу на X64, которая, очевидно, не работает.

Само приложение работает, но я не вижу его зарегистрированным после запуска

That.exe /RegServer

Буду признателен за полезные советы по миграции activex с 32 на x64.

Код, который обрабатывает / RegServer параметр ниже:

if(lstrcmpi(lpszToken, _T("RegServer")) == 0)
  {
   _Module.UpdateRegistryFromResource(IDR_OUTDISKSARG, TRUE);
   nRet = _Module.RegisterServer(TRUE);
   bRun = false;
   break;
  }

32-разрядный ActiveX для меня не подходит, так как я должен загрузить его в x64. NET процесса.

Ответы [ 2 ]

3 голосов
/ 23 декабря 2010

Если у процесса достаточно прав для записи в реестр, вам придется позаботиться об этом, запустив его из командной строки с повышенными правами, что, скорее всего, добавит только ключи реестра COM в представление реестра, что 64-бит-процессы могут видеть.

32-битные COM-клиенты получают другое представление реестра, HKLM \ Software \ Wow6432Node.Там не будет найти ключи реестра там.Просмотрите RegCreateKeyEx () в документации по SDK.Обратите внимание на ссылку внизу и рассказ о параметре KEY_WOW64_32KEY.Онлайн статья здесь .

32-разрядные клиенты, получающие доступ к 64-разрядному внешнему COM-серверу, в остальном являются довольно хорошо поддерживаемым сценарием с некоторыми оговорками.Как создание и регистрация как 32-битных, так и 64-битных прокси / заглушек DLL.

0 голосов
/ 23 декабря 2010
  1. Когда вы запускали That.exe / RegServer, вы делали это из командной строки администратора?Если нет, то, вероятно, именно поэтому это не сработало.

  2. Если у вас получилось, а оно все еще не сработало, попробуйте отладить его, чтобы увидеть, что он делает с реестром.например, используйте Process Monitor или даже отладчик Visual Studio (не забудьте убедиться, что отладчик запускает ваше приложение от имени администратора).

...