java调用dll 释放dll 随调随关 之 JNA 操作

本文采用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不难 大家不会灰心.

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
TY 文 件 记 录 控 制 程 序 文件 编号 TY/QP-01- 2010 版本 A/0 发布 日期 2010年08月30 日 编 制 刘威 审 核 胡许 先 批 准 陈前 保 受控状 态 受 控 1.目 的 确保质量管理体系文件受到有效控制,各个文件使用场所得到有效版本 的文件。 确保记录的标识、编制、贮存、归档、保护、检索、处置等所需的控 制,便于识别和检索,以提供质量管理体系符合要求和有效运行的客观 证据及追溯和改进的信息。 2.适用范围 适用于本公司范围内质量文件的控制(包括质量手册、程序文件、三级 文件、与产品有关的技术文件、外来文件、图纸资料和记录样表)。 适用于本公司范围内与质量管理体系运行有关的各种质量记录。 3.职 责 3.1 办公室负责本程序的归口管理; 3.2总经理负责质量手册、程序文件的批准; 3.3 办公室负责组织质量体系质量文件的编写,管理者代表负责质量手 册、程序文件的审核; 3.4 各部门负责本部门质量管理作业文件的编制、审核,提交管理者代 表批准。 3.5各部门负责本部门职责范围内文件和质量记录的管理。 4.文件工作程序 4.1质量体系文件的控制 4.1.1 文件层次 a) 质量手册:第一层 质量手册 b) 程序文件:第二层 程序文件 c) 三级作业文件:第三层 作业文 件 d) 质量记录表单:第四层 质量 记录表单 注1:本公司的质量管理体系文件详见公司的《文件总览表》。 4.1.2文件的编制、审核和批准 a)质量手册由办公室组织编写,管理者代表负责审核,总经理批准; b)程序文件由相关职能部门组织编写,管理者代表批准; c)三级文件由相关部门负责编写,部门主管批准,跨部门的三级文件 由管理者代表批准。 注2:生产技术部负责技术标准、外来文件的控制和评审,对国家、行 业标准进行跟踪,并编制"国家、行业法律、法规、技术标准目录"。 4.1.3文件的标识 a) 凡受控文件一律加盖"受控"章,予以区别,质量体系文件 需在显著部位标明文件名称、文件的编号、版本号、修改状 态、页码等内容; b) 对所有外来文件应加盖"外来"章,予以区分,对外来文件 应编制《外来文凭件总览表》,并沿用原文件的编号; c) 对存入媒体的文件,对文件夹/文件名应予以标识; 注3:质量管理体系文件应标明版本/修改状态标识,同时在"文件总览 表"内标明各类文件版本/修改状态,确保文件的更改和现行修订状态 得到识别,使文件得到有效控制。 4.1.4文件的编号 a) 所有质量管理体系文件保持清晰、统一编号,便于识别和检 索; b) 本公司制定的质量管理体系文件编号按以下示例进行: TY/QX—XX—XXXX 颁布年份 文件顺序号 质量体系文件及文件类别代号 其中TY/QX中"X":"M"代表质量手册;"P"代表程序文 件;"D"代表三级文件;"B"代表质量记录表单。 c)外来文件编号沿用原有编号。 4.1.5文件的归档 质量管理体系文件及技术文件经编制、审批后交办公室归档存放,并登 记于《文件总览表》,同时对存入各种媒体的文件进行归档。 各部门使用的文件归各部门负责管理及归档存放。 技术资料及有关质量记录、生产运行原始记录送交生产技术部整理成册 后交办公室归档存放。 4.1.6文件分发和接收 a) 质量体系文件的分发 体系文件在发放前须经管理者代表批准,技术文件在发放前须经技术经 理批准才能发 放到相关部门。 办公室按规定的发放范围将有关文件发放到相关部门,并在"文件收发 记录表"内,并做好签收记录。 b) 文件领用的申请 当需使用文件的人员未领到文件时,或当文件使用人的文件破损严重或 丢失,需要增发、更换或补发时,由文件领用人提出申请,经管理者代 表批准后向办公室办理领用手续,新发的文件上给予新发放号,更换或 补发的文件沿用原文件分发号。 4.1.7文件的更改 a)文件更改时必须向责任归口部门办理更改手续,同时填写《文件更改 申请通知单》,并按原审批程序进行审批。 b)文件更改采用换页方式,并将新页修改状态变更(版本/修 改:"A/0"中由0上增至10结束),并在《文件更改记录表》内做好记 录。 c)文件经多次修改或大幅度修改时应进行改版(A代表A版,0代表0次修 改,修改后依次类推;修改次数超过10次进行换版,即由A版改为B 版),并按原审批程序审批。 4.1.9 作废文件的处理 作废文件加盖"作废"印章,需作资料保留的作废文件由办公室加 盖"作废保留"印章方可留用,其余经管理者代表批准销毁后进行销 毁。 4.10文件的借阅 本单位受控文件一般情况下不准外借,特殊情况需要借阅的须经管 理者代表批准同意后进行;外单位人员应在受控存放处临时借阅,不得 复印。 本单位人员借阅文件应在《文件借阅登记表》上做好记录。 4.2 本公司

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值