一、 工作环境

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. 流畅的python第十五章上下文管理器和else块学习记录

    with 语句和上下文管理器for.while 和 try 语句的 else 子句 with 语句会设置一个临时的上下文,交给上下文管理器对象控制,并且负责清理上下文.这么做能避免错误并减少样板代码, ...

  2. decal in unity

    // Upgrade NOTE: commented out 'float4x4 _CameraToWorld', a built-in variable// Upgrade NOTE: replac ...

  3. Android媒体扫描详细解析之一(MediaScanner & MediaProvider)

    用过Android手机的同学都知道,每次开机的时候系统会先扫描sdcard,sdcard重新插拔(挂载)也会扫描一次sdcard. 为什么要扫描sdcard,其实是为了给系统的其他应用提供便利,比如, ...

  4. 使用ant构建报错,编码GBK的不可映射字符解决方法

    使用ant的核心就是这个build.xml.然后再在cmd中使用ant命令就行了. build.xml构建文件包含一个工程(project). 工程包含若干个目标(target). 目标可以依赖于其他 ...

  5. transport.js报hasOwnProperty对象不支持此属性

    ECShop transport.js错误 这次出现的问题是transport.js在IE下提示对象不支持该用法.出现错误位置为608行的下面的代码: if(this.hasOwnProperty(k ...

  6. 有关﹤![CDATA[ ]]> 说明

    CDATA DTD中的属性类型 全名:character data 在标记CDATA下,所有的标记.实体引用都被忽略,而被XML处理程序一视同仁地当做字符数据看待, CDATA的形式如下: <! ...

  7. Win7双屏显示设置

    双显示器:一个是T410自己的屏幕,一个是宏基的Acer1296*768显示器. 连接:将宏基显示器的Display端子连接到笔记本的Display口上,电源接上. 设置过程: 1.右键点屏幕,选“S ...

  8. 怎样删除Weblogic Domain?

    转自:http://blog.csdn.net/biplusplus/article/details/7433558 旁白 由于没有现成的配置工具可以做这件事,我们需要手工来删除. 正题 以下方法适用 ...

  9. MySQL外键及级联删除 && 表的存储引擎与创建索引 && 删除数据库和表

    Messages表: mysql>create table Messages( ->message_id int auto_increment primary key, ->user ...

  10. C#秘密武器之多线程——参数与返回值

    线程函数要么没有参数,要么只能有一个object参数,而且均没有返回值,这样就大大降低了程序的灵活性,其实我们想要的是能像普通方法一样正常使用参数和返回值!能不能实现这个需求呢?下面就介绍两种方法 一 ...