2011-06-24 9 views
5

estoy desarrollando archivos JNI DLL en Delphi 7. Los archivos resultantes serán 32 bits DLL, cosa que no funcionan en una máquina virtual de Java de 64 bits.64 bits de enlace de un archivo objeto

Delphi 7 tiene la posibilidad de generar c o C++ ficheros objeto. ¿Es posible crear una DLL de 64 bits a partir de estos archivos de objetos con un enlazador de terceros?

+0

Si no le importa cómo cambiar su código conversaciones Delphi para el código Java, tal vez se podría crear una interfaz de red entre ellos, y poner el código de Delphi en su propio servidor REST, que se ejecuta como un proceso CGI. Entonces puede tener código de 32 bits para hablar con código java de 64 bits fácilmente, porque están en procesos separados, y solo están conectados por un socket. –

Respuesta

9

El compilador Delphi emite código de objeto de 32 bits. No importa cómo lo segmente, ese código no puede vincularse a un módulo de 64 bits.

Por el momento la mejor opción es utilizar FreePascal que puede producir 64 bits DLL. Hay una próxima versión de 64 bits de Delphi pero su fecha de lanzamiento es desconocida.

Otra opción sería la de imponer el uso de la versión de 32 bits de la JVM, si eso es posible para ti.

+0

No descarté la idea porque la interfaz STDCALL está arreglada en ambos casos. Creo que una capa mínima de compatibilidad podría crear un segmento de 32 bits y un envoltorio alrededor de las funciones exportadas. Pero esto es solo especulación. – vbence

+3

@vbence No puede ejecutar código de 32 bits en un proceso de 64 bits. –

+1

@vbence: la convención de llamadas es realmente diferente en Win32 y Win64. Sin embargo, tiene razón en que es técnicamente posible escribir un puente entre el código de 32 bits y el de 64 bits (consulte http://cc.embarcadero.com/item/27667). – PhiS

3

No. 64 código de bits es muy diferente de código de 32 bits, más allá de simplemente utilizando 64 instrucciones bits. MS introdujo reglas mucho más estrictas en el paso de parámetros, datos de pila y alineación, y así sucesivamente. Realmente no hay manera de incluir código de 32 bits en una DLL de 64 bits (y debido a esto también está prohibido llamar al código de 32 bit de 64 bit one, y viceversa, pero usando técnicas específicas). Tienes que esperar al compilador Delphi de 64 bits (y espero que su primera versión sea lo suficientemente buena), o buscar en otro lado. Delphi 7 se está quedando obsoleto de todos modos.

+0

Gracias! Sé que está desactualizado, pero me suscribo a un enfoque "si no está roto, no lo arregles" con respecto a este componente. – vbence

+2

@vbence Si no desea cambiar el código Pascal, utilice una JVM de 32 bits –

Cuestiones relacionadas