一、 工作环境
1. windows (64位), JDK (64位),dll文件 (64位)
2. Linux (64位), JDK (64位),so文件 (64位)
3. JNA的官方资源路径为https://github.com/twall/jna/
二、 实际操作
1.在cf.h头文件有如下申明:采用C语言形式接口函数
extern "C"
{
/*
功能 : 获取相关参数
输入参数 param 参数名称
输出参数 value 参数值
输出参数 paramlength 参数长度
*/
Public int GetParam(const wchar_t* param, wchar_t* value, int* paramlength);
}
2. Java调用代码:接口CFJna.java
package cn.jna.test;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.WString;
import com.sun.jna.ptr.IntByReference;
public interface CFJna extends Library {
//加载动态资源库
CFJna library = (CFJna) Native.loadLibrary("TestCF", CFJna.class);
//定义要调用的方法,与cf.h头文件中定义的函数名一样
/*Public int GetParam(const wchar_t* param, wchar_t* value, int* paramlength);*/ //cf.h头文件
int GetParam(WString param, Pointer value, IntByReference paramLength);
}
3. 测试调用:CFJnaTest.java
package cn.jna.test;
import com.sun.jna.Pointer;
import com.sun.jna.WString;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
public class CFJnaTest {
public static void main(String[] args) {
//方法所需参数
Pointer value = new PointerByReference().getPointer();
IntByReference paramLength = new IntByReference();
int getParam = CFJna.library.GetParam(new WString("clip_time"), value, paramLength);
System.out.println("getParam:"+getParam);
//取出结果值
String paramValue = value.getWideString(0);
//结果长度
int valueLen = paramLength.getValue();
System.out.println("paramValue:"+paramValue);
System.out.println("valueLen:"+valueLen);
}
}
收尾: 请继续关注,或关注我的新浪微博:微博Abel