У нас есть приложение 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