java 调用 delphi_【java】试用JNA调用Delphi的dll方法。
package com.duduli.li;
import com.sun.jna.Native;
import com.sun.jna.win32.StdCallLibrary;
public interface JnaUseDelphiDll extends StdCallLibrary{
//加載動(dòng)態(tài)鏈接庫,把庫dll文件默認(rèn)放到系統(tǒng)C盤window目錄下的system32文件夾下或者到j(luò)ava的bin目錄
JnaUseDelphiDll instance = (JnaUseDelphiDll)Native.loadLibrary("WWServiceCom_3", JnaUseDelphiDll.class);
//對應(yīng)動(dòng)態(tài)鏈接庫中的方法, 要注意的是 這里的方法必須要和鏈接庫(dll文件)對應(yīng)的方法名一致
//public int ClearRecord(String addr, int sm);
public String Test2();
}
package com.duduli.li;
public class TestJNA {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
JnaUseDelphiDll jnaDemo = JnaUseDelphiDll.instance;
String s = jnaDemo.Test2();
System.out.println("輸出結(jié)果為:"+s);
}
}
如果有參數(shù)的話,需要參考鏈接信息。
一下代碼是從鏈接從復(fù)制過來。
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
public class DLL {
public static void main(String[] args) throws NativeException, IllegalAccessException{
String sb = new String("192.168.17.200");
ClearRecord(sb, 0);
}
public static int ClearRecord(long thandle, String addr, int sm) throws NativeException, IllegalAccessException{
JNative n = null;
n = new JNative("SYC","ClearRecord"); //加載動(dòng)態(tài)庫,SYC 為庫名,ClearRecord為調(diào)用方法
n.setRetVal(Type.INT); //設(shè)置方法返回值類型
n.setParameter(0, Type.STRING ,addr); //設(shè)置第一個(gè)參數(shù)值
n.setParameter(1, sm); //設(shè)置第二個(gè)參數(shù)值
n.invoke(); //執(zhí)行
int result = n.getRetValAsInt(); //獲得返回值
System.out.println("返回結(jié)果: " + result);
System.out.println("調(diào)用的DLL文件名為:"+n.getDLLName());
System.out.println("調(diào)用的方法名為:"+n.getFunctionName());
return result;
}
}
經(jīng)過測試,對方返回了幾個(gè)類型:PAnsiChar,String,Pchar.
來進(jìn)行測試。
對于第一種PAnsiChar是能正確返回?cái)?shù)據(jù)的。
對于String的方法,會(huì)出現(xiàn)亂碼,原因和我或許和我猜想的一樣。
對于Pchar的類型。?? 只能獲取到第一個(gè)字符。
以上只是作為總結(jié)和猜想。另外jna.jar提供大家下載。
jna.jar (777.2 KB)
下載次數(shù): 54
分享到:
2012-08-30 11:04
瀏覽 4843
評(píng)論
總結(jié)
以上是生活随笔為你收集整理的java 调用 delphi_【java】试用JNA调用Delphi的dll方法。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入Bert实战(Pytorch)---
- 下一篇: mern技术栈好处?_如何开始使用MER