2010-05-27 16 views
5

Por lo tanto, he estado usando JPIB para comunicarme con dispositivos GPIB en mi programa Java. Sin embargo, me he encontrado con un inconveniente. Los sistemas más nuevos están basados ​​en sistemas operativos de 64 bits. Sin embargo, el archivo jpib.dll está escrito en 32 bits. No puedo pensar en ningún tipo de llamadas que necesite hacer que sean verdaderamente dependientes de 64 bits.Formas de ajustar .dll de 32 bits para que funcione en un sistema operativo de 64 bits

El verdadero problema aquí es que el proyecto JPIB no se ha actualizado desde septiembre de 2006. He intentado enviar un correo electrónico al desarrollador a través de SourceForge, pero no creo que vaya a llegar a ninguna parte con eso.

¿Alguien conoce alguna forma de evitar esto? ¿O cómo (y podría decirme cómo) recompilar el .dll en el cumplimiento de AMD-64?

+0

¿es posible agrupar simplemente un JRE de 32 bits junto con su aplicación que utiliza las bibliotecas nativas de 32 bits? Y luego inicie su aplicación con el paquete JRE. Entonces también funcionará en la arquitectura de 64 bits. – KJW

Respuesta

5

Nota: No tengo idea de qué son JPIB y GPIB.

Si desea utilizar la DLL tal cual, entonces deberá escribir una aplicación que pueda vincular dinámicamente esa DLL y comunicarse con su aplicación a través de algún tipo de IPC.

Si desea reconstruir esa DLL, necesitará obtener la fuente y todas sus dependencias e instalar las herramientas de compilación. Esto no debería ser demasiado difícil, aunque si está instalando MS Visual Studio parece que necesito un par de trampas para obtener las cosas x64 instaladas. Sin embargo, esto puede depender de su plataforma de instalación; si está instalando en x64, presumiblemente solo funcionará.

4

Una máquina virtual de 32 bits seguirá funcionando en una plataforma AMD de 64 bits y plataformas Intel EMT64.

Sin embargo, si desea utilizar la biblioteca en un proceso de 64 bits, puede usar Java para ayudarlo. La solución usa 2 JVMs, una de 32 bits y otra de 64 bits. La de 64 bits aloja su aplicación principal. El de 32 bits alberga la biblioteca JPIB. A continuación, utilice RMI para tender un puente entre ellos. En más detalle:

  • la biblioteca JPIB tiene una API bastante pequeña. Desafortunadamente, se implementa todo como clases. Se abstrae la biblioteca mediante la implementación de interfaces que tienen las mismas firmas de métodos que las principales clases de controladores.
  • Implemente la interfaz llamando directamente a las clases JPIB. Utiliza RMI para exponer esta interfaz a través de RMI, desde una JVM de 32 bits.
  • En su JVM de 64 bits utiliza RMI para obtener una instancia de la interfaz JPIB de la máquina virtual de 32 bits. Ahora puede llamar a los métodos en esa interfaz como si fueran locales, pero se implementan como llamadas remotas a la VM de 32 bits para su ejecución.
0

Debería poder escribir un contenedor de 64 bits que se conecta a la DLL de 32 bits y hacer que su código JNI llame al contenedor de 64 bits en lugar de la DLL de 32 bits. Thunking es un tema de C/C++ bastante avanzado y dependiente de la plataforma.

Cuestiones relacionadas