一、 工作环境

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. XmlRpc with C#/Java【转】

    最近看了几个项目都是用xmlrpc协作完成的,就做了几个测试客户端和服务器端和大家一起分享.希望能对入门的同学有帮助 关于xmlrpc的介绍和规范参考http://www.xml-rpc.net/ 下 ...

  2. Apache2.4 与 php7.1.6的链接

    首先Apache已经安装成功,在浏览器中能够打开再下载php 我的Apache安装版本为Apache2.4.26 x64 vc14 所以我php也应该是vc14编译的 php下载地址为 http:// ...

  3. 往aws中的s3上传数据

    在官网下载对应的sdk http://aws.amazon.com/cn/sdk-for-net/ 然后再aws上为s3上的bucket生成密钥对 access_key和secret_key 调用对应 ...

  4. 【Python】装饰器实现日志记录

    好的日志对一个软件的重要性是显而易见的.如果函数的入口都要写一行代码来记录日志,这种方式实在是太低效了,但一直没有找到更好的方法.后来用python写一些软件,了解到python的装饰器功能时,突然人 ...

  5. 【架构】使用OpenStack、AliYun、AWS、Docker打造融合的IAAS、PAAS平台

    GalaxyManager,即平台门户,旨在整合数据中心异构虚拟化资源为统一的资源池,并在资源池上为用户提供各类IAAS.PAAS服务. GitHub:https://github.com/junne ...

  6. angular 的进一步深入理解

    早上同事问我个问题,angular 的表单验证有没有啥第三方库可以用? 这个问题,我想了下,之前我做的表单验证好像也没用到第三方的库来验证,直接用angular 内置的 directive 就可以搞定 ...

  7. EffectiveJava(28)怎么利用有限制的通配符类型来提升API的灵活性

    有时候,我们需要的灵活性要比不可变类型所能提供的更多.所以针对一些通用性的方法,通常用泛型代替固定的数据类型,特别是当你要将某个方法打包成Jar的时候. 结合之前的例子,我们增加尝试用有限制的通配符类 ...

  8. Android常用传感器用法一览(2)

    在Android2.3 gingerbread系统中,google提供了11种传感器供应用层使用. #define SENSOR_TYPE_ACCELEROMETER       1 //加速度#de ...

  9. 网页图表控件Highcharts选项配置参数

    Highcharts提供大量的选项配置参数,您可以轻松定制符合用户要求的图表,目前官网只提供英文版的开发配置说明文档,而中文版的文档网上甚少,且零散不全.这里,我把Highcharts常用的最核心的参 ...

  10. PHP和数据访问之(插入。删除。和更新数据)

    插入: <?php $conn=@new mysqli('localhost','root','123','mytestdb'); $q_str=<<<EOM insert i ...