一、 工作环境

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. Javascript时间字符串比较

    //startdate和enddate的格式为:yyyy-MM-dd hh:mm:ss //当date1在date2之前时,返回1;当date1在date2之后时,返回-1:相等时,返回0 funct ...

  2. javascript函数的四种调用模式及其this关键字的区别

    方法调用模式: 当一个函数被保存为对象的一个属性时,我们称它为一个方法.当一个方法被调用时,this被绑定到该对象. //方法调用模式 var myObject = { value: 0 , incr ...

  3. eclipse package explorer视图中怎么让default package不显示?

    如下图所示:

  4. 查询mysql数据库中所有表名

    查找所有表的语句 select table_name from information_schema.tables where table_schema='当前数据库';  

  5. BS中保存参数

    开发中经常需要将值存起来,当点击某一项时以便知道点击了哪一项. 一:应用JS页面跳转(牛腩中讲到) HTML: <td class="txt c"><a href ...

  6. lua coroutine

    Lua中协程都放在表coroutine中. Lua协程的四个状态 挂起(suspended):一个协程被创建的时候,处于挂起状态,不会自动运行. 运行(running):coroutine.resum ...

  7. UIImagePickerController 视频录制操作,视频大小,时间长度

    一:使用 iOS 系统 UIImagePickerController 获取视频大小 获取视频长度 - (void)viewDidLoad { [super viewDidLoad]; // Do a ...

  8. IO/序列化/JSON

    一.读写文件 1.open:打开文件 open(path, mode, encoding='xxx', errors='ignore') mode取值:rU 或 Ua 以读方式打开, 同时提供通用换行 ...

  9. 算法笔记_083:蓝桥杯练习 合并石子(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数.求把所有石子 ...

  10. hadoop权威指南(第四版)要点翻译(4)——Chapter 3. The HDFS(1-4)

    Filesystems that manage the storage across a network of machines are called distributed filesystems. ...