2013-07-06 3 views
11

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

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

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

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

+1

Шаг 3 должен создать ключ, видимый для 32-разрядных программ. Более точное имя ключа - HKLM \ Software \ Wow6432Node \ Classes \ AppID. Шаг 6 должен создать ключ, видимый для 64-битных программ, тот же путь минус часть Wow6432Node.Что-то не так с вашей машиной, если ключ, созданный на шаге 3, виден на пути в шаге 6. Не пропустите часть Wow6432Node. –

+0

Вы можете решить проблему, потому что я использовал или использовал 32 бита или 64 бит regedit? может возникнуть проблема в том, что я зарегистрировал библиотеку с 32 или 64 regsrv32.exe? –

+1

Рассматривали ли вы перестройку библиотеки как 64? (Или, я полагаю, лучший вопрос был бы, у вас есть доступ к источнику библиотеки?) –

ответ

0

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

Успехов

0

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

0

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

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

2-е решения гораздо проще ...

1

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

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

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

Смежные вопросы