С использованием библиотеки com 32 бит на 64-битном приложении

У меня есть библиотека 32 com и вы хотите использовать ее функциональность с помощью 64-битного приложения, я искал в Интернете и смог получить это обходной путь

  • Найдите свой GUID объекта COM в HKey_Classes_Root\Wow6432Node\CLSID\[GUID]
  • После размещения добавьте новое значение REG_SZ (string). Имя должно быть AppID, а данные должны совпадать с идентификатором GUID объекта COM, который вы только что искали
  • Добавить новый ключ в HKey_Classes_Root\Wow6432Node\AppID\
  • Новый ключ следует называть так же, как GUID объекта com
  • Под новым добавленным ключом добавьте новое значение REG_SZ (string) и назовите его DllSurrogate. Оставьте значение пустое
  • Создайте новый ключ под HKey_Local_Machine\Software\Classes\AppID\

но он не работает на 64-битных Windows 7, основная проблема заключается в том, когда я делаю шаг 6 я нашел ключ уже существующий, любой орган знает почему? или как я могу его преодолеть?

документация здесь очень короткая

Ответ 1

Итак, что вам нужно сделать, это запустить этот 32-битный COM-компонент в своем собственном процессе, то есть вызовом CoCreateInstance с CLSCTX_LOCAL_SERVER.

Либо это будет прямо с существующей DLL, либо если вы не должны обернуть его собственным 32-битным простым COM-компонентом, который поддерживает запуск в качестве локального сервера...

Попытка настроить реестр - это беспроигрышная игра - используйте Dll так, как она была предназначена, и спасите себя от боли.

Ответ 2

Это может быть вызвано виртуализацией реестра. У меня были проблемы, подобные этому в прошлом. Самая большая досада заключается в том, что вы не видите значения или ключи, которые редактор жалуется, уже существуют. Они фактически существуют в другой части реестра (вероятно, улей пользователей).

Удачи.

Ответ 3

64-разрядный исполняемый файл не может вызывать 32-разрядную DLL (и наоборот). Вы должны скомпилировать ваше 64-битное приложение как 32-разрядное. Таким образом, вы сможете использовать DLL и запустить все это на 32-разрядной и 64-разрядной ОС.

Ответ 4

Реестр - это всего лишь подходящий способ найти необходимую DLL.

Если вам известен путь к 32-разрядной DLL в каждой системе или вы можете передать его с вашим приложением, и вы управляете кодом своего 64-битного приложения, вы можете использовать следующие методы: 1) Механизм + манифест SxS позволяет загружать dll из локальной папки без регистрации и создавать COM-компоненты из него 2) Сделайте это вручную http://www.codeproject.com/Articles/18433/Emulating-CoCreateInstance

Второе решение намного проще...