JNA调用Dll的问题
发布时间:2020-11-17 13:14:25 所属栏目:Windows 来源:互联网
导读:将DLL和DLL对应的配置文件置于JDK的bin目录中,需要注意的是64位的JDK只能使用64位的dll 可以使用 file命令检测dll是否是64位 配置 public interface YilianInterface extends Library{ public int SIT_CRT_GetStatus(); public int SIT_CRT_Reset(int
将DLL和DLL对应的配置文件置于JDK的bin目录中,需要注意的是64位的JDK只能使用64位的dll 可以使用 file命令检测dll是否是64位 配置public interface YilianInterface extends Library{ public int SIT_CRT_GetStatus(); public int SIT_CRT_Reset(int nMode); public int SIT_EPP_UseEppPlainTextMode(); public int SIT_Trans_init(); } 调用的类中使用声明这个 private static YilianInterface HDICCard_INSTANCE; static{ HDICCard_INSTANCE =(YilianInterface)Native.loadLibrary("XZ_POS_Pay",YilianInterface.class); } 调用普通调用int b = HDICCard_INSTANCE.SIT_CRT_GetStatus(); 有回调值的调用//使用带有返回值的参数的需要使用Pointer,并预先分配内存 Pointer p = new Memory(256); int b = HDICCard_INSTANCE.XZ_POS_Trans(1,null,"0.10",p); C/C++中与Char * 对应的类型应该为String,而不是byte[],而返回值需要预先分配内存 可能出现的问题测试Dll中方法的时候tomcat直接挂掉,可能会有以下两种原因 Dll就存在内存泄漏,这个需要dll提供方将内存泄漏的位置进行修改Java提供的内存分配不合理,需要手动分配内存(这个主要是针对具有返回值的方法而言) 代码如下Pointer p = new Memory(256); int b = HDICCard_INSTANCE.XZ_POS_Trans(1,null,p); //byte[] byteArray = p.getByteArray(0,256); HashMap<String,Object> map = new HashMap<String,Object>(); if(b==0){ map.put("status",0); map.put("msg","消费成功"); }else{ map.put("status",-1); map.put("msg","消费失败"); } long peer = Pointer.nativeValue(p); Native.free(peer);//手动释放内存 Pointer.nativeValue(p,0); (编辑:十堰站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows-installer – installshield和windowsinstaller之间
- 如何正确创建一个nim / nimrod windows dll
- WIN10家庭中文版远程提示要求的函数不支持 win10家庭版提示
- windows – CFileDialog :: OnInitDialog()不调用
- DLL符号_FooBar @ 16中的数字16代表什么?
- Windows/Linux命令查看文件MD5,SHA1,SHA256 文件校验
- windows10 安装python.msi出现error 2502/2503解决方法
- windows – 如何成功更改执行策略并启用PowerShell脚本的执
- 如何使用Qt安装Windows服务?
- Windows Server 2016-Win Ser 2016新增功能
推荐文章
站长推荐
- winapi – Win32 No-MFC中的消息映射
- windows-phone-8 – 使用WNS for windows phone
- Windows下wamp php单元测试工具PHPUnit安装及生成
- window python2.7 ImportError: No module named
- Win11专业版 64位全新系统
- winforms – .NET ListView和Windows 7
- 在Windows上使用clang编译c 11程序时出错
- Windows BATCH:如何为单个脚本禁用QuickEdit模式
- 获取Microsoft 10 Edge浏览器Mime类型php
- windows-8 – 屏幕关闭时,WinRT应用程序可以继续
热点阅读