一、 工作环境

1. windows (64位), JDK (64位),dll文件 (64位)

2. Linux (64位),      JDK (64位),so文件 (64位)

3. JNA的官方资源路径为https://github.com/twall/jna/

二、 实际操作

1.在cf.h头文件有如下申明:采用C语言形式接口函数

  1. extern "C"
  2. {
  3. /*
  4. 功能 :      获取版本信息
  5. 输出参数    result         结果
  6. 输出参数    resultlength   结果长度
  7. */
  8. Public int GetVersionInfo(char* result, int* resultlength);
  9. }

2. Java调用代码:接口CFJna.java

  1. package cn.vx.test;
  2. import com.sun.jna.Library;
  3. import com.sun.jna.Native;
  4. import com.sun.jna.Pointer;
  5. import com.sun.jna.ptr.IntByReference;
  6. public interface CFJna extends Library {
  7. CFJna library = (CFJna) Native.loadLibrary("TestCF", CFJna.class);
  8. int GetVersionInfo(Pointer result, IntByReference resultLength);
  9. }

3. 测试调用:CFJnaTest.java

    1. package cn.vx.test;
    2. import com.sun.jna.Memory;
    3. import com.sun.jna.Pointer;
    4. import com.sun.jna.ptr.IntByReference;
    5. public class CFJnaTest {
    6. public static void main(String[] args) {
    7. //配置参数
    8. Pointer resultv = Pointer.NULL; //char* resul 指定一个空指针
    9. IntByReference resultLength = new IntByReference(); //int* resultlength
    10. //调用两次,第一次获取结果的长度
    11. //          第二次再根据长度去获取字节数组
    12. int getVersionInfo = CFJna.library.GetVersionInfo(resultv, resultLength);
    13. System.out.println("getVersionInfo:"+getVersionInfo);
    14. if(getVersionInfo == SUCCESS) {//表示获取成功
    15. //第一次获取结果的长度
    16. int vesionLen = resultLength.getValue();
    17. System.out.println("versionLen:"+vesionLen);
    18. //第二次再根据长度去获取字节数组
    19. resultv = new Memory(vesionLen);
    20. getVersionInfo = CFJna.library.GetVersionInfo(resultv, resultLength);
    21. System.out.println("getVersionInfo:"+getVersionInfo);
    22. //获取字节数组
    23. byte[] byteArray = resultv.getByteArray(0, vesionLen);
    24. //转化成字符
    25. System.out.println(new String(byteArray,"GB2312"));
    26. }
    27. }
    28. }
  1. 原文: http://blog.csdn.net/blog_abel/article/details/31404597

Java 调用 C/C++ 之 JNA 系列实战篇 —— 输出char * (六)的更多相关文章

  1. 《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程)

    1.简介 从这一篇开始介绍和分享Java+Selenium+POM的简单自动化测试框架设计.第一个设计点,就是支持跨浏览器测试. 宏哥自己认为的支持跨浏览器测试就是:同一个测试用例,支持用不同浏览器去 ...

  2. 3、Java调用C语言(JNA法)

    这个方法挺方便的……(改写“二.Java调用C语言(JNative法)“的例子) 一.访问https://github.com/twall/jna ,下载jna-4.1.0.jar(版本不同名字不同) ...

  3. 《手把手教你》系列技巧篇(十六)-java+ selenium自动化测试-元素定位大法之By xpath下卷(详细教程)

    1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大.  使用这种方法几乎可以定位到页面上的任意元素. ...

  4. Java 基础:认识&理解关键字 native 实战篇

    Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 泥瓦匠初次遇见 navicat 是在 java.lang.Object 源码中的一个hashCode方 ...

  5. Java调用net的webservice故障排除实战分享

    转载地址:http://blog.sina.com.cn/s/blog_4c925dca01014y3r.html 前几天公司要接入国外公司的一个业务功能,对方是提供的net产生的webservice ...

  6. 多线程爬虫Java调用wget下载文件,独立线程读取输出缓冲区

    写了个抓取appstore的,要抓取大量的app,本来是用httpclient,但是效果不理想,于是直接调用wget下载,但是由于标准输出.错误输出的原因会导致卡住,另外wget也会莫名的卡住. 所以 ...

  7. Java 程序该怎么优化?(实战篇)

    面试官:出现了性能问题,该怎么去排查呢? 程序猿:接口响应那么慢,时间都花到哪里去了? 运维喵:为什么你的应用跑着跑着,CPU 就接近 100%? 分享一些真实生产问题排查故事,看看能否涨姿势,能否 ...

  8. [JNA系列]Java调用Delphi编写的Dll之实例Delphi使用PWideChar

    Delphi代码 unit UnitDll; interface uses StrUtils, SysUtils, Dialogs; function DoBusinessWide(pvData: P ...

  9. [JNA系列]Java调用Delphi编写的Dll之实例Delphi使用PAnsiChar

    Delphi代码 unit UnitDll; interface uses StrUtils, SysUtils, Dialogs; function DoBusinessAnsi(pvData: P ...

随机推荐

  1. sqlserver中事务总结:begin tran,rollback tran,commit tran

     第1个相关用法:摘自:https://shiyousan.com/post/f13d29b7-0d87-4168-bd8b-8b28b0991b5a 以下是出现错误的SQL部分语句: 此错误的原因是 ...

  2. 使用MyEclipse 2014构建Maven项目的两种方法

    前提: MyEclipse已配置Maven,具体步骤见http://blog.csdn.net/haishu_zheng/article/details/51492491 方法一: 1 File--& ...

  3. ckeditor 绑定事件

    CKEDITOR.instances["Content"].on("instanceReady", function () { //set keyup even ...

  4. 会声会影X10 64位整合光盘V10.1.0.14简体中文版 下载

    http://xiazai.huishenghuiying.com.cn/wm/huishenghuiyingx10_64bit_wmqm.exe

  5. js实现选择及复制粘贴

    最近项目有个点击复制到粘贴板的需求,在这里做一个简单的例子分享给大家,没考虑兼容性,需要兼容的大家去查找下文档 //html<p id="element">测试测试&l ...

  6. A-Z排序控件的实现

    前言 最近项目需要做一个地区首字母a-z排序的效果,记录一下自己如何实现的. 先看下效果图: 分析 这种效果自己实现还是第一次;之前见过这种效果: 这些字母都是onDraw画上去的;只要知道每个字母的 ...

  7. js 常用类型转换简写

    1.字符串转数字 +'666' 2.转换为字符串 ''+666 //'666'

  8. Java环境变量设置辅助工具

    安装完JDK之后,很容易忘了设置系统的环境变.最近发现一个设置JDK的小工具,非常简单,推荐给大家: 下载地址:http://files.cnblogs.com/eastson/JavaPathSet ...

  9. ASP.NET MVC3 系列教程 - 模型

    I:基础绑定的实现 1.在前面的两篇基础文章(路由 及 控制器&视图)当中,还没对QueryString的绑定进行介绍,因为我觉得它更适合放在这一章节中去介绍.我们在用WebForm去开发的时 ...

  10. Excel去除单元格中的汉字

    Alt+F11,插入,模块 Function RemoveChinese(rng As Range) s = Len(rng.Text) For i = 1 To s txt = StrConv(Mi ...