JNA调用Dll的问题
发布时间:2020-11-17 14:47:36 所属栏目: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); (编辑:百色站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 无法找到MSVCP120D.DLL或0x00007启动错误的解决方法
- windows – sysopen权限被拒绝
- 什么是“Microsoft C例外”?
- Windows上的64位版Octave
- Windows系统·添加Python import 的库/模块路径
- Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配
- windows – ruby win32apistructs(VerQueryValue)
- windows-7 – 在windows7中设置JRE路径的要求,如设置JDK的路
- Windows Containers 大冒险: 优化计划(Dockerfile)
- 10053 您的主机中的软件中止了一个已建立的连接
推荐文章
站长推荐
- 如何在Windows中挂钩应用程序和进程启动?
- windows-phone-7 – Caliburn Micro中的墓碑
- Windows BATCH:如何为单个脚本禁用QuickEdit模式
- Windows – 无法从GitBash运行TASKKILL
- 在Windows上使用clang编译c 11程序时出错
- 安装程序 – NSIS与Windows游戏资源管理器集成
- 类共享警告不允许我使用visualVM在本地(Windows)
- windows-mobile – Visual Studio 2010 Professi
- win10上部署Hadoop-2.7.3——非Cygwin、非虚拟机
- 使用Windows Power Management API调暗监视器
热点阅读