views:

302

answers:

5

I need to use the logic contained in some java classes. I found JNI, but that project seems not updated recently.

Is there a way to use it in a Delphi native application? I use Delphi 2009.

A: 

I very much doubt it. Delphi Code gets compiled into an executable while Java code is executed by a Virtual Machine. So unless you launch a complete Virtual Machine inside Delphi code I see no way to easily include the logics.

perdian
+2  A: 

You could try j-interop. The technique I should adopt is to build a COM wrapper of java business logic, and using this COM server from delphi throught interoperability.

Delphi can build a type library of a COM server, and you could istantiate the com server using this typelibrary. Type library is simply a wrapper of the server, exposing its interface to be used by delphi code.

The key to communicating with different platform softwares is called "interoperability".

You can find this also in .net versus win32. Tipically delphi code is win32 (exe or dll), and you can build communication protocol between delphi objects and .net assemblies or java bytecode using interoperability solutions.

+3  A: 

A newer solution than JNI is JNA (https://jna.dev.java.net/), which also supports callbacks from (Delphi) DLLs. I found it easy to use.

mjustin
But does JNA supports also calling java classes or only allowing java to "consume native things"?
See https://jna.dev.java.net/#callbacks for an example where the native DLL calls a method in the Java class to enumerate all native windows. This could be extended to register methods which can be used by the Delphi DLL to communicate with the existing Java classes.
mjustin
A: 

With Java 6, it takes only a few lines of code to write a standalone web service server which then can be invoked from Delphi.

small step-by-step tutorial, using the free NetBeans IDE and Delphi:

more xamples:

mjustin
A: 

Embed the VM in the native code. This worked for me. An example with c can be found here. http://java.sun.com/docs/books/jni/html/invoke.html

Chris