java 调用 delphi编写的dll

使用JNI(JAVA本地接口)来调用dll完成用delphi实现的功能:

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依赖的资源找不到的异常。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值