Способы перенести 32-разрядный .dll, таким образом, это будет работать в 64-разрядной ОС

Так, я использовал JPIB для общения с устройствами GPIB в моей программе Java. Однако я столкнулся с препятствием. Более новые системы основаны на ОС на 64 бита. Однако файл jpib.dll записан в 32-разрядном. Я не могу думать ни о каком виде вызовов, которые он должен был бы выполнить, которые являются действительно 64-разрядным зависимым.

Реальная проблема здесь состоит в том, что проект JPIB не был обновлен с сентября 2006. Я попытался послать dev по электронной почте через SourceForge, но я не думаю, что доберусь где угодно с этим.

Кто-либо знает о каких-либо путях вокруг этого? Или знайте как (и мог сказать мне как) перекомпилировать .dll в соответствие AMD-64?

5
задан Windows programmer 28 May 2010 в 00:08
поделиться

3 ответа

Примечание: я понятия не имею, что такое JPIB и GPIB.

Если вы хотите использовать DLL как есть, вам нужно написать приложение, которое может динамически связывать эту DLL и взаимодействовать с вашим приложением через какой-то IPC.

Если вы хотите перестроить эту DLL, вам необходимо получить исходный код и все его зависимости и установить инструменты сборки. Это не должно быть слишком сложно, хотя, если вы устанавливаете MS Visual Studio, мне, кажется, потребуется пара ошибок, касающихся установки материалов x64. Однако это может зависеть от вашей платформы установки; если вы устанавливаете на x64, вероятно, он будет просто работать.

5
ответ дан 14 December 2019 в 01:02
поделиться

Вы должны иметь возможность написать 64-битную оболочку, которая преобразуется в 32-битную DLL, а ваш код JNI вызывает 64-битную оболочку вместо 32-битной DLL. Thunking - довольно продвинутая тема C / C ++, зависящая от платформы.

0
ответ дан 14 December 2019 в 01:02
поделиться

32-разрядная виртуальная машина по-прежнему будет работать на 64-разрядной платформе AMD и платформах Intel EMT64.

Однако, если вы хотите использовать библиотеку в 64-битном процессе, вы можете использовать java, чтобы помочь вам. В решении используются 2 JVM - 32-разрядная и 64-разрядная - на 64-разрядной размещается ваше основное приложение. В 32-битном находится библиотека JPIB. Затем вы используете RMI , чтобы установить мост между ними. Более подробно:

  • библиотека JPIB имеет довольно небольшой API. К сожалению, все это реализовано как классы. Вы абстрагируете библиотеку, реализуя интерфейсы, которые имеют те же сигнатуры методов, что и основные классы драйверов.
  • Реализуйте интерфейс, напрямую вызвав классы JPIB. Вы используете RMI для предоставления доступа к этому интерфейсу через RMI из 32-битной JVM.
  • В 64-битной JVM вы используете RMI для получения экземпляра интерфейса JPIB от 32-битной виртуальной машины.Теперь вы можете вызывать методы в этом интерфейсе, как если бы они были локальными, но они реализованы как удаленные вызовы 32-разрядной виртуальной машины для выполнения.
4
ответ дан 14 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: