Миграция COM-объекта .NET на 64-разрядную версиюC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Миграция COM-объекта .NET на 64-разрядную версию

Сообщение Anonymous »

У нас есть приложение на C++, которое использует несколько COM-объектов. COM-объекты основаны на .NET (с использованием COM Interop).
Мне нужно перенести приложение на 64-разрядную версию. Мне конкретно нужно, чтобы приложение C++ было 64-битным. Я не хочу перекомпилировать все COM-объекты .NET в 64-битную версию и доставлять два набора DLL (32-битную и 64-битную).
Я провел расследование и обнаружил, что могу загружать 32-битные COM-библиотеки в 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?

Подробнее здесь: https://stackoverflow.com/questions/293 ... -to-64-bit
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»