Использование 32-битной DLL в 64-битном процессе через COM - PullRequest
8 голосов
/ 28 декабря 2011

Итак, некоторое время назад я исследовал проблему, которая, как я знал, скоро появится. У нас есть DLL, которая ссылается на 32-битные версии определенной библиотеки. Для нас нет доступной версии этой библиотеки для x64, и у нас нет практических вариантов ее замены.

Когда я выполнил это начальное исследование, я нашел одну или две статьи, описывающие метод, с помощью которого 64-битный процесс может использовать 32-битную DLL (Windows) через COM-сервер. К сожалению, я потерял ссылки, которые сохранил, и теперь я искал более часа без удачи.

Кто-нибудь здесь знаком с процессом, который я описываю? Я не могу вспомнить, какое магическое заклинание я использовал для поиска правильного результата в поиске, и, конечно, сейчас время реализации. Заранее благодарим за любую помощь, которую вы, ребята, можете предложить, а я тем временем продолжу поиск.

Ответы [ 3 ]

5 голосов
/ 28 декабря 2011

Этого может быть недостаточно, но вы можете начать: Взаимодействие процессов

В 64-битной Windows, 32-битный COM-сервер вне процессаможет взаимодействовать с 64-разрядным клиентом, а 64-разрядный COM-сервер, находящийся вне процесса, может взаимодействовать с 32-разрядным клиентом. Поэтому, если у вас есть 32-битная DLL, которая не поддерживает COM, вы можете обернуть ее в COM-сервер, работающий вне процесса, и использовать COM для маршалинга вызовов в 64-битный процесс и из него.

и Доступ к 32-разрядным библиотекам DLL из 64-разрядного кода

Перенос 32-разрядного приложения Windows на 64-разрядную машину можетбыть проблематичным, если у вас есть 32-битные библиотеки DLL, которые вы не можете переписать.Майк Беккер показывает вам, как вы можете получить доступ к 32-битным DLL из 64-битного кода, используя встроенные механизмы IPC ...

3 голосов
/ 28 декабря 2011

Клиент локального сервера вне процесса является примером запуска COM вне процесса.Если вы используете com-сервер вне процесса, ваш клиент может быть 64-битным, а сервер 32-битным.

1 голос
/ 29 декабря 2011

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

Приведенная ниже блок-схема объясняет основы

Посмотрите эту ссылку для деталей:

http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/#more-355

...