怎样用java调用delphi编写的dll文件里的函数
1.直接调用几乎不可能,2.实现的方法需要通过c++来进行转接,使得DELPHI的参数格式首先转化为java能够接受的参数格式。因此需要编写一个c++程序来做参数的转换就...
1.直接调用几乎不可能, 2.实现的方法需要通过c++来进行转接,使得DELPHI的参数格式首先转化为java能够接受的参数格式。 因此需要编写一个c++程序来做参数的转换 就是这个c++程序程序怎么写?谁能帮我!急!!!
展开
1个回答
展开全部
使用JNI(JAVA本地接口)来调用delphi的dll完成用实现的功能:1. 编写Java类,在类内部静态加载要调用的dll文件,然后给出使用的函数的声明(用native关键字),示例如下:public class CompileDllCaller ...{ static ...{ System.loadLibrary("CompileDllCaller"); } public native void buildSetupExe();} 2. 编写delphi的dll,首先要有JNI_MD.INC和JNI.pas,可以从 http://www.pacifier.com/~mmead/jni/delphi/ 的Using the Java Native Interface with Delphi获得,这两个文件必不可少,里面包含了delphi对jvm,java数据类型等的定义及delphi和java之间类型的转换。dll的方法名必须符合 Java_packageName_className_MethodName的规则,如果Java类没有包名,则格式为Java_className_MethodName,方法的参数前两个是固定的(PEnv: PJNIEnv; Obj: JObject),方法声明后要使用stdcall关键字。然后使用关键字exports导出,例如:procedure Java_CompileDllCaller_buildSetupExe(PEnv: PJNIEnv; Obj: JObject);stdcall;begin try Writeln('Enter Java_CompileDlllCaller_buildSetupExe:'); if setOutputDir('F:S') then begin buildSetupExe; end; Writeln('compile success!'); Writeln('End Java_CompileDlllCaller_buildSetupExe.'); except on e: Exception do Writeln(e.Message); end;end; exports Java_CompileDllCaller_buildSetupExe; 3. 文件部署。用delphi编译生成的dll有两个地方可以放置,只有这样jvm才能自动找到dll执行加载工作,一个是在%JAVA_HOME%\jre\bin下面,一个是Windows\system32下面。而这个dll用到的其它资源要放在Windows\system32下面,否则会出现dll依赖的资源找不到的异常。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询