JNA调用Dll的问题
发布时间:2020-11-17 13:47:19 所属栏目: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调试工具入门 — windebug
- 如何正确使用MSBuild社区任务库在.NET dll上设置SVN版本号
- windows-phone-8 – 使用WNS for windows phone 8
- wpf – xaml Scrollviewer – 禁用整个窗口的过度滚动/橡皮
- 值为NULL的列是否会影响Microsoft SQL Server的性能?
- windows – 用户和内核之间的线程fs段寄存器切换
- windows-phone-8 – 适用于Windows Phone 8的企业应用程序分
- Vulkan Tutorial 07 Window surface
- pyshark无法在Windows 7(python)上捕获数据包
- Windows 8应用程序是否运行符合标准的JavaScript,HTML5和CS
推荐文章
站长推荐
- 为什么WPF在不同版本的Windows上呈现不同?
- .net – 如何通过webclient下载图像(jpg)并保存到
- windows修改PowerShell(命令提示符)默认中文编
- 在Windows UWP应用程序中使用Python和C#
- windows-phone-8 – 适用于Windows Phone 8的企业
- 使用dll和java jni4net时出现UnsatisfiedLinkErr
- Windows系统DOS命令之多线程技术
- 飞溅屏幕 – 通用窗口10个应用程序的Splash屏幕
- windows – procdump -t – 如何在进程终止时转储
- Windows Python:为什么第一个打开的窗口未显示为
热点阅读