在工作中,需要使用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 begin 14 ShowMessage('Hello'+ IntToStr(i)); 15 i := 999; 16 end; 17 18 function HelloStr(var str: Integer): Integer; stdcall; 19 var 20 s: string; 21 begin 22 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;
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 }
function中的参数不要用var就可以了.