在工作中,需要使用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;
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 }
添加回答
举报
0/150
提交
取消