概述
本文采用JNA调用DLL
note:个人尝试过JNI,Jnative,等其他调用方式.总而言之 繁琐,不适合Java吧.或者不适合小编,这里只推荐JNA,核心代码三行搞定调用DLL.
jnative好用,但是文件路径等等还是有问题,不能像java一样去使用。也不推荐
jna调用,意外之喜很好用的。貌似是对Jnative进行了封装.可以自行研究一下,之前研究的 忘了…
.
step1 JNA Maven 仓库引入
注意事项:java调用dll 需要jdk32位版本
// 版本自己去Maven仓库搜 一般用最新版本的上1-2个版本
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>4.1.0</version>
</dependency>
.
step2 将DLL构造成interface
@Component
public class sendEdiByJnaforJobId {
// 接口名字 我直接写的 DLL文件名
public interface EDI_Middleware extends Library {
// 加载DLL StaticConstant.EDI_MIDDLEWARE_DLL 这是DLL路径,你可以直接放在 项目Resource下,直接写DLL名字即可调用,也可指定路径C:\ddd\xxx.....
EDI_Middleware INSTANCE = (EDI_Middleware)Native.loadLibrary(StaticConstant.EDI_MIDDLEWARE_DLL, EDI_Middleware.class);
// DLL文件对应的方法名 这些函数名字,返回值 必须跟你的DLL是一致的,不能随意写.不然JNA反射是找不到你的方法的. 你可以直接把DLL中的函数名字粘贴 过来.
void initial_DM();
// DLL文件对应的方法名
int gen_edi2carrier(Integer java,Double a);
}
// 自己封装了一个work方法调用DLL
public void work(Long jobId) {
Double jobD=jobId.doubleValue();
int java=0;
// DLL调用 方式一 调用完 不关闭DLL
// EDI_Middleware.INSTANCE.initial_DM();
// int a=EDI_Middleware.INSTANCE.gen_edi2carrier(java,jobD);
// System.out.println(a);
try {
// DLL调用 方式二 调用完 关闭DLL
NativeLibrary instance = NativeLibrary.getInstance(StaticConstant.EDI_MIDDLEWARE_DLL);
instance.getFunction("initial_DM").invoke(new Object[]{});
instance.getFunction("gen_edi2carrier").invokeDouble(new Object[]{java,jobD});
instance.dispose();
}catch (Exception e){
e.printStackTrace();
}
}
@SuppressWarnings("static-access")
public static void main(String[] args) {
// 我用 组件扫描到容器了 我可以@autowired 调用
sendEdiByJnaforJobId aaaa=new sendEdiByJnaforJobId();
long aaa1=4106465; // 4099988
aaaa.work(aaa1);
}
}
是不是很简单,最重要的就是构造 与DLL与之对应的接口类.
简而言之,jna需要自己定义java接口,这个类的方法和dll文件一样,你必须十分清楚dll文件的结构和里面的方法以及返回值,参数。
将DLL映射成Java 接口.这样JNA在调用时反射生成实现类,这样就可以随心随意用我们的java进行调用了.
step3 小结一下
释放DLL也是自己反射生成的,JNA没有提供显示调用close DLL.本人参照了的显示调用DLL,进了源码看见作者是用NativeLibrary进行Close的,所以我就反射 自己生成 自己关闭DLL.
Java调用DLL不难 大家不会灰心.
最后
以上就是整齐板栗为你收集整理的java调用dll 释放dll 随调随关 之 JNA 操作的全部内容,希望文章能够帮你解决java调用dll 释放dll 随调随关 之 JNA 操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复