У меня есть общая библиотека, которая скомпилирована как 32-разрядная. Могу ли я использовать его из 64-битного приложения или мне нужно также скомпилировать общую библиотеку как 64-разрядную?
Загрузите 32-разрядную общую библиотеку из 64-разрядного приложения?
Ответ 1
Нет, вы не можете загружать 32-битную библиотеку в 64-разрядное приложение обычными способами.
Существуют некоторые умные хаки, такие как наличие 32-разрядного приложения, которое загружает библиотеку и экспортирует функции через интерфейс IPC, но если у вас есть возможность скомпилировать библиотеку как 64-разрядную, то это далеко лучший выбор.
Ответ 2
Вы не можете загружать динамически или статически 32-битную библиотеку из 64-разрядного приложения или наоборот.
Есть ряд рабочих обходов, о которых я знаю:
- Сделать 64-разрядную версию DLL
- Сделайте 32-разрядную версию приложения
- Ввести COM-прокси-объект (также называемый суррогатом) в качестве посредника связи. Описан здесь.
- Разместите DLL в отдельном (32-разрядном) EXE и используйте технику IPC
Существует несколько методов межпроцессного взаимодействия (IPC). Вот несколько примеров:
- named pipe
- Windows messsages
- розетка
- HTTP-прослушиватель
- Служба WCF (описана здесь)
- Удаленный доступ .NET