如何在java中使用jna.jar调用Delphi写的dll

来源:互联网 发布:sql select sum where 编辑:程序博客网 时间:2024/05/06 15:50

在工作中,需要使用java调用dll文件,已经dll文件放入system32文件夹下.

在调用dll时,有些有效,有些报错.请问是什么原因?成功失败的见最下面的java代码中的注释.

我想传一个string进去,返回一个int值.请问如何写代码?

dll代码如下:

 1 procedure  Hello(); stdcall; 2 begin 3 //  Writeln('Hello'); 4   ShowMessage('Hello'); 5 end; 6   7 procedure  HelloInt(i: integer); stdcall; 8 begin 9   ShowMessage('Hello'+ IntToStr(i));10 end;11  12 procedure HelloRRR(var i: integer); stdcall;13 begin14   ShowMessage('Hello'+ IntToStr(i));15   i := 999;16 end;17  18 function HelloStr(var str: Integer): Integer; stdcall;19 var20   s: string;21 begin22   Result := -1;23   s := IntToStr(str);24 //  Writeln('Hello'+s);25   ShowMessage('Hello'+s);26  // s :=  '44034479041101200025318.xml';27   str := 100;//PChar(s);28   Result := 0;29 end;

java代码如下:
 1 public interface CLibrary extends Library { 2 CLibrary INSTANCE = (CLibrary) Native.loadLibrary("testdll", CLibrary.class); // 引入库文件 3  4 public int HelloStr(int i); // 声明方法 5 public void Hello(); 6 public void HelloInt(Integer i); 7 public void HelloRRR(Integer i); 8 } 9 10 11 12 public static void main(String[] args) {13 CLibrary.INSTANCE.Hello(); // 成功14 CLibrary.INSTANCE.HelloInt(Integer.valueOf(16)); // 成功15 Integer k = 18;16 CLibrary.INSTANCE.HelloRRR(k); // 失败17 System.out.println("k="+k); 18 System.out.println("java call dll result="+CLibrary.INSTANCE.HelloStr(20)); // 失败19 }
 
  • jna.jar (777.2 KB)
  • 下载次数: 759
  • 原创粉丝点击