Миграция .NET COM объекта на 64 бит - PullRequest
2 голосов
/ 28 мая 2010

У нас есть приложение C ++, которое использует несколько COM-объектов. COM-объект основан на .NET (с использованием COM-взаимодействия).

Мне нужно перенести приложение на 64 бит. Мне особенно нужно, чтобы приложение C ++ было 64-битным. Я не хочу перекомпилировать весь com-объект .NET в 64-битный и доставить два набора DLL (32-битных и 64-битных).

Я занимался расследованием и обнаружил, что могу загрузить 32-битные COM Dll в 32-битном суррогатном процессе, используя (DllSurrogate в реестре). Я знаю, как это сделать, но это означает, что все COM-объекты выйдут из процесса.

В C ++ у меня был код: CoCreateInstance (CLSID_SomeClass, NULL, CLSCTX_INPROC_SERVER, IID_SomeInterface, (void **) & pobj);

Работало нормально, но как только я переключаюсь на CLSCTX_LOCAL_SERVER (и добавляю ключи реестра для DllSurrogate), он не может найти интерфейсы (ошибка 0x80004002). Я проверил реестр и обнаружил, что при регистрации .NET COM DLL он добавляет разделы реестра ClsID, но не добавляет раздел реестра Interface и TypeLib.

Вопрос в том, как создать эти ключи реестра для .NET COM?

С уважением, Victor

1 Ответ

0 голосов
/ 11 декабря 2013

Если вы хотите, чтобы все выполнялось, то и приложение, и COM-объект должны быть в 64-битном режиме. См. Можно ли загрузить 32-битную DLL в 64-битный процесс в Windows? .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...