32-битный сервер Com в 64-битной системе - PullRequest
0 голосов
/ 21 октября 2010

Я разработал Com Server и на Windows XP 32 бит. Для тестирования Com-сервера я создал клиент с C # для вызова функций через Interop. Все работает нормально, но теперь мне нужно запустить ComServer в 64-битной системе Windows 7. Я взял библиотеку ComServer DLL и C # EXE на 64-битный компьютер, зарегистрировал DLL ComServer с помощью regsrv32 и запустил программу C #. Когда я впервые попытался получить доступ к функции ComServer, все, что я получаю, это ошибка:

System.

на английском:

System.Runtime.InteropServices.COMException (0x80040154): COM-класс для компонента с CLSID {BA4D7F46-A47E-4CB9-A153-2B4657C4DD29} не удалось вызвать из-за ошибки: 80040154.

Что здесь не так? Разве нельзя вызвать 32-битную DLL в 64-битной системе? Если да, как работают все остальные 32-битные программы?

С уважением camelord

Ответы [ 2 ]

1 голос
/ 21 октября 2010

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

Лучшее решение - получить 64-битнуюверсия библиотеки COM-сервера.Если это невозможно (что вполне обычно), у вас есть два варианта:

  • сделать программу-потребитель 32-битной (вероятно, вам нужно изменить цель с «Любой процессор» на «x86» в VisualStudio)
  • принудительно назначить COM-сервер суррогатным процессом (для этого используйте COM +).

В первом случае вы делаете и программу, и COM-сервер 32-разрядными, и поэтомуБиблиотека COM-сервера загружается нормально.Во втором случае COM + создает 32-битный суррогатный процесс и загружает в него библиотеку, ваша программа связывается с этим процессом через RPC, поэтому вам не нужно беспокоиться о разности битов.

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

0 голосов
/ 21 октября 2010

С здесь :

Используйте corflags с переключателем / 32bit +, чтобы приложение работало в 32-битном режиме

Сборка CorFlags.exe [опции]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...