Как получить доступ к 32-битной DLL из 64-битного процесса или 64-битной DLL

У меня есть Java-программа, которая использует JNI для доступа к файлу «dll», написанному на C ++. Изначально у меня была проблема с доступом к «dll» с помощью JNI, но когда я узнал о «экспорте DLL», использовал его и смог Вызвать функцию, инкапсулированную в «dll». Теперь я могу вызывать функцию, написанную только в «64-битной dll», через код c ++, связанный через java. Если я попытался вызвать функцию, встроенную в 32-битную DLL, компилятор выдаст ошибку или не даст результата вообще. После часа игры «ошибка и компиляция» я обнаружил, что с помощью 64-битного jdk и его функции JNI я не могу вызвать 32-битную dll, написанную на c ++. Я должен использовать 32-битный JDK для доступа к 32-битной DLL через его JNI.
Сейчас я ищу решение, с помощью которого я могу получить доступ даже к 32-битной DLL (мой устаревший код написан на 32-битной DLL, и его нельзя скомпилировать в 64-битную DLL)
с 64-битного JDK. или в простых словах я ищу такой код, с помощью которого я могу получить доступ к 32-битному коду dll, написанному на c ++ из 64-битного процесса или dll. Наряду с этим я хотел бы упомянуть, что я прошел через все решения, предоставляемые «stackoverflow» для «доступа -32 битных dll из 64-битного процесса», но я не нашел ни одного из них находчивых для меня. Они упоминают о «СОМ» и «Суррогатном процессе»,
но я не могу понять, как эту вещь можно использовать для решения моей проблемы. Так может кто-нибудь предложить мне чистое решение или руководство или «справочники» для доступа к 32-битной DLL из 64-битной DLL.

Примечание: пожалуйста, не преуменьшайте голоса по этому вопросу, поскольку я действительно говорю, что пока не найдено надлежащего решения в «переполнении стека» для этой проблемы.

2

Решение

Вы можете использовать суррогат, есть много информации о том, как вы можете настроить так, чтобы компонент загружался в требуемой архитектуре.

Дело в том, что если у вас есть интерфейсы, которые не поддерживают маршалинг, или компонент имеет локальное поведение потоков или процессов, он не будет работать правильно. Таким образом, будут работать только те компоненты, которые готовы к удаленному использованию.

Проверьте свой компонент, прежде чем даже попробовать суррогатный подход.

0

Другие решения

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

Правильным решением является компиляция кода C ++ в 32- и 64-битные DLL.

-1

По вопросам рекламы [email protected]