1.第一个问题:Java调用dll文件

JNative方式调用dll
JNative是一种能够使Java语言使调用DLL的一种技术,对JNI进行了封装,可能有些读者会有这样一个问题,JNative对JNI进行了封装,并且是一种跨语言的使用DLL,会不会在效率方面很不如人意,我可以用我使用Jnative的经验告诉你,不会!因为我用Jnative就是用来处理大量的数据调用,是基于实时数据库接口的调用。而实时数据库的数据量是非常大的。
首先下载JNative,
注意:将JNative解压,并将其中的JNativeCpp.dll拷贝到system32文件夹中,libJNativeCpp.so是linux平台使用的。
(网址:http://blog.csdn.net/a491857321/article/details/51504094)
使用过程出现问题:
1.找不到NISEC_SKSC.dll,出现这个问题是因为我仅仅将NISEC_SKSC.dll文件放到system32下,而NISEC_SKSC.dll有其他dll的引用,所以需要将安装过的税控所有文件拷到system32下

2.找不到JNativeCpp.dll,需要将其放到system32下,同时JNative.jar需要放到jdk和jre目录下面


配置classpath添加JNative.jar的路径

2.第二个问题。xml与bean转换
采用XStream读取返回信息转为bean

3.第三个问题。传递xml报文,编码问题,一定要写成gbk编码

 public static String getPKServerResult(String xmlcontent, Object... objs) {logger.info("log输入为======\r" + xmlcontent);Pointer pIn = null;Pointer pOut = null;try {String res = JNAUtil.class.getClassLoader().getResource("NISEC_SKSC.dll").getFile();// 加载动态库及函数JNative jnPKServer = new JNative("NISEC_SKSC.dll", "PostAndRecvEx");byte[] bytes = (xmlcontent + '\0').getBytes("GBK");MemoryBlock   memoryBlockIn=MemoryBlockFactory.createMemoryBlock(bytes.length);pIn = new Pointer(memoryBlockIn);// 设置传入参数pIn.setMemory(bytes);jnPKServer.setParameter(0, pIn);// 处理传出参数if (objs != null && objs.length == 1 && objs[0] instanceof Number) {MemoryBlock   memoryBlockOut=MemoryBlockFactory.createMemoryBlock(((Number) objs[0]).intValue());pOut = new Pointer(memoryBlockOut);} else {MemoryBlock   memoryBlockOut=MemoryBlockFactory.createMemoryBlock(1000000);pOut = new Pointer(memoryBlockOut);}jnPKServer.setParameter(1, pOut);// 执行调用jnPKServer.invoke();//            String bak ="";
//            String bak =pOut.getAsString();byte[] mm=pOut.getMemory();String bak = new String(mm,"GBK");
//            String bak = new String(pOut.getAsByte(0),"GBK");//            for(int i=0, sumi=((Number) objs[0]).intValue(); i< sumi; i++){//                bak+=((char) pOut.getAsByte(i));
//            }logger.info("log输出为======\r" + bak);return bak.trim();} catch (Exception e) {logger.error("Jnative遇到错误", e);} finally {try {if (pIn != null) {pIn.dispose();}if (pOut != null) {pOut.dispose();}} catch (NativeException e) {logger.error("Jnative遇到错误", e);}}return null;}

网址:http://bbs.csdn.net/topics/390806040,String就是一段字符串,需要通过byte[]进行编码的操作

到此技术点基本搞定了,突然有一天客户打电话说网页打不开了,看了一下,tomcat关掉了,开启后,运行一段时间又挂了。。。后来想想可能是因为JNA需要申请内存空间,如果一次申请太多,会导致程序异常,所以将调用接口改为递归形式,每次只读一个开票设备一天的数据。问题解决了,看一下效果吧

java调用百望税控NISEC_SKSC.dll发送xml报文相关推荐

  1. java调用C或者C++动态库dll

    java调用C或者C++动态库dll,本文章使用的是IntelliJ IDEA Community Edition 2021.2.3版本测试的 1.新建项目 linjie.demo,添加类HelloL ...

  2. Java调用阿里云短信接口,发送短信

    Java调用阿里云短信接口,发送短信 1.短信服务这个很简单,只需要知道accessKeyId(AK).accessKeySecret(SK).短信签名.短信模板即可. 2.域名和产品名称是固定的,使 ...

  3. Java调用C/C++编写的第三方dll动态链接库(zz)

    这里主要用的方法是JNI.在网上查资料时看到很多人说用JNI非常的复杂,不仅要看很多的文档,而且要非常熟悉C/C++编程.恐怕有很多人在看到诸如此类的评论时已经决定绕道用其他方法了.本文将做详细的介绍 ...

  4. 转Java调用C/C++编写的第三方dll动态链接库(非native API)--- JNI

    http://www.cnblogs.com/AnnieKim/archive/2012/01/01/2309567.html 转载于:https://www.cnblogs.com/meetrice ...

  5. java dll 调用方法_关于Java调用dll的方法 | 学步园

    Java语言本身具有跨平台性,如果通过Java调用DLL的技术方便易用,使用Java开发前台界面可以更快速,也能带来跨平台性. Java调用C/C   写好的DLL库时,由于基本数据类型不同.使用字节 ...

  6. android调用 qt so文件路径,Android Java调用Qt写的so库

    有时候,我们反编译apk得到一个so库,如果直接使用这个so库的话,必须使用原来so库同样的package名字,才能用.这样人家反编译你的apk,就知道你侵犯了人家的版权.为了达到混淆的目的,我们可以 ...

  7. 明华读卡器 java_Java调用明华RF读写器DLL文件过程解析

    这篇文章主要介绍了Java调用明华RF读写器DLL文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 首先jdk必须得是32位的,IDE也必 ...

  8. Java调用ocx控件以及dll

    2019独角兽企业重金招聘Python工程师标准>>> http://lvqingboy-163-com.iteye.com/blog/769358 通过Java调用OCX控件有几种 ...

  9. java调用ocx控件获取数据_Java调用ocx控件以及dll

    通过Java调用OCX控件有几种方法,JNI.JACOB.Jawin等 1.JNI 最直接的方式,也是最麻烦的方式,需要自己完成所有的工作,不推荐. 2.Jawin 尝试了一下,效果不错,但相对来说, ...

最新文章

  1. bzoj2427: [HAOI2010]软件安装
  2. Jupyter Notebook——设置远程服务器登陆
  3. 辽宁省普通话水平测试软件,辽宁普通话水平测试报名入口
  4. 【Linux系统编程】Linux进程调度
  5. SAP Spartacus B2B 页面信息提示图标的弹出窗口显示实现逻辑
  6. delphi打开word文件(刚刚学会的嘿嘿~)
  7. Java 代码复用 —— 泛型
  8. 优秀案例UI素材模板|深层解析iPhone手机APP页面怎么设计?
  9. python爬取微博恶评_Python爬取新浪微博评论数据,了解一下?
  10. Xcode9使用新体验
  11. mysql 水晶报表_Crystal Reports 2008(水晶报表) JDBC连接mysql数据库
  12. 项目管理知识领域--十大知识领域
  13. 图片放大后很模糊怎么办?
  14. PySpark处理数据并图表分析
  15. python docx 字体设置_python docx 中文字体设置
  16. VB编程:UCase转大写,LCase转小写-4
  17. 如何实现受管控的安全文件传输MFT?
  18. Skynet项目搭建
  19. LaTeX中引用参考文献
  20. 使用 auto-drawing 画一个鱼骨图

热门文章

  1. Ubuntu 18.04配置静态IP地址
  2. nginx: [warn] conflicting server name “xxx“ on 0.0.0.0:80解决
  3. 进入pe系统 原系统启动服务器,pe和启动系统安装系统教程
  4. 荧光平均值计算matlab,科学网—使用Image J进行自动荧光定量分析 - 陆绮的博文...
  5. 解决IDEA : Could not autowire. No beans of ‘xxxx‘ type found
  6. 前端开发环境搭建(工具使用)
  7. 天刀手游pc端显示服务器维护,天刀手游电脑版无法更新网络修复工具
  8. Linux 内核 vs Windows 内核
  9. Anker—学习成长笔记
  10. PHP小V脸蛋白线,HPH小v脸蛋白线好不好用?HPH小v脸蛋白线怎么用