С использованием библиотеки 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
Второе решение намного проще...