Java(JNA)调用C++动态库(dll)
2021-07-04 05:06
标签:通过 示例 文件 ref src jna path get win JNA(Java Native Access):是建立在JNI之上的Java开源框架,SUN主导开发,用来调用C、C++代码,尤其是底层的库文件(windows中叫dll文件,linux下是.so文件)。 先注意几个问题: 1.下载jna.jar包,jna-platform.jar 可以不要,但是有的话对代码的调试是有帮助的;platform.jar对于jna.jar是一种补充和扩展,jna.jar相当于核,platfrorm.jar相当于增量插件。 2.动态链接库编译时的平台。如果是通过x86平台编译,那么就只能使用32位的jdk环境加载,如果是64位jdk就必须使用x64平台编译动态库;不然,即使后面编码,动态链接库的路径都没有问题,调用还是会报错。 3.调用时多注意dll的位置。 代码开始: 对于Java来说,一般都是调用已经生成好的dll动态库。所以LZ并没有贴动态库的生成。若需要,百度一下即可。 这是普通的Java项目的调用测试,LZ是把dll动态库放到项目的根目录下的,就是选中项目然后复制就ok了。 下面这个例子是web项目中调用dll动态库示例: path部分就是动态库的路径,因为LZ的应用是要放到linux环境下部署的。LZ是把动态库放到lib下的,这样方便部署,简单方便。如下图所示: LZ是先测试后,再在项目中运用,上面两种方式均成功。 Java(JNA)调用C++动态库(dll) 标签:通过 示例 文件 ref src jna path get win 原文地址:https://www.cnblogs.com/Joe-Go/p/9614194.htmlpublic class JNATestDll {
public interface Dll extends Library{
Dll instance = (Dll) Native.loadLibrary("HidComm", Dll.class);
public boolean LoadHidComm();
public boolean HidWriteData(String buf,int len);
}
public static void main(String[] args) {
boolean load = Dll.instance.LoadHidComm();
if (load) {
String buf = "weixin://wxpay/bizpayurl?pr=FCT5hbP";
int len = buf.length();
boolean ewm = Dll.instance.HidWriteData(buf, len);
System.out.println(ewm);
}
}
}
public class JnaCallDllService {
private static String path = System.getProperty("user.dir").concat(File.separator).concat("lib").concat(File.separator);
public interface SerialAndDllNew extends Library {
SerialAndDllNew instance = (SerialAndDllNew)Native.loadLibrary(path.concat("zzcard"), SerialAndDllNew.class);
public int Icc_OpenComPort(int nPort, String gate, int baud, int timeout);
public int Icc_PowerOn(int card_no,ByteByReference atr,ShortByReference ictype);
}
}