Могут ли мои 32-битные и 64-битные COM-компоненты находиться на одной машине? - PullRequest
5 голосов
/ 09 июля 2009

У меня есть 32-битный COM-компонент, который в основном используется ASP, у нас также есть 64-битная версия.

64-битная версия функционально идентична, и она также использует тот же ProgID (и, насколько я знаю, тот же CLSID и т. Д.).

Могу ли я установить / regsvr 64-битную версию на той же машине, что и 32-битная версия (очевидно, в другой папке), и мои 32-битные приложения продолжают использовать 32-битный компонент, в то время как мои 64-битные приложения используют 64-битная версия?

Это компоненты собственного кода, написанные на C ++, а не .NET.

1 Ответ

7 голосов
/ 09 июля 2009

Это должно быть возможно.

В 64-разрядных окнах реестр и файловая система перенаправляется для 32-разрядных приложений. Регистрация для 32-битных COM-библиотек будет в отдельном месте в реестре (HKLM \ Software \ Wow6432Node \ Classes), а ваши COM-компоненты должны находиться в отдельных папках, 64-битных в Program Files и 32-битных в Program Files (x86). Перенаправление реестра / файла для 32-разрядных приложений должно сделать это прозрачным.

Возможно, что сам компонент мог бы предотвратить это, например, если он создает глобальные ресурсы, которые могут конфликтовать между 32-битной и 64-битной версиями.

Эта ситуация уже существует в 64-битной Windows. В моей 64-битной системе у меня есть:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Classes \ CLSID {8856F961-340A-11D0-A96B-00C04FD705A2} \ InProcServer32 \ По умолчанию = C: \ Windows \ SysWow64 \ ieframe.dll

И

HKEY_CLASSES_ROOT \ CLSID {8856F961-340A-11D0-A96B-00C04FD705A2} \ InProcServer32 \ По умолчанию = C: \ Windows \ System32 \ ieframe.dll

32-разрядная и 64-разрядная версия элемента управления WebBrowser в одной системе.

...