亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在java中使用jna.jar調用Delphi寫的dll

如何在java中使用jna.jar調用Delphi寫的dll

開滿天機 2018-12-07 04:11:48
在工作中,需要使用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 } ?
查看完整描述

1 回答

?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

function中的參數不要用var就可以了.

查看完整回答
反對 回復 2018-12-16
  • 1 回答
  • 0 關注
  • 607 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號