Java 调用 C/C++ 之 JNA 系列实战篇 —— 输出char * (六)
一、 工作环境
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语言形式接口函数
- extern "C"
- {
- /*
- 功能 : 获取版本信息
- 输出参数 result 结果
- 输出参数 resultlength 结果长度
- */
- Public int GetVersionInfo(char* result, int* resultlength);
- }
2. Java调用代码:接口CFJna.java
- package cn.vx.test;
- import com.sun.jna.Library;
- import com.sun.jna.Native;
- import com.sun.jna.Pointer;
- import com.sun.jna.ptr.IntByReference;
- public interface CFJna extends Library {
- CFJna library = (CFJna) Native.loadLibrary("TestCF", CFJna.class);
- int GetVersionInfo(Pointer result, IntByReference resultLength);
- }
3. 测试调用:CFJnaTest.java
- package cn.vx.test;
- import com.sun.jna.Memory;
- import com.sun.jna.Pointer;
- import com.sun.jna.ptr.IntByReference;
- public class CFJnaTest {
- public static void main(String[] args) {
- //配置参数
- Pointer resultv = Pointer.NULL; //char* resul 指定一个空指针
- IntByReference resultLength = new IntByReference(); //int* resultlength
- //调用两次,第一次获取结果的长度
- // 第二次再根据长度去获取字节数组
- int getVersionInfo = CFJna.library.GetVersionInfo(resultv, resultLength);
- System.out.println("getVersionInfo:"+getVersionInfo);
- if(getVersionInfo == SUCCESS) {//表示获取成功
- //第一次获取结果的长度
- int vesionLen = resultLength.getValue();
- System.out.println("versionLen:"+vesionLen);
- //第二次再根据长度去获取字节数组
- resultv = new Memory(vesionLen);
- getVersionInfo = CFJna.library.GetVersionInfo(resultv, resultLength);
- System.out.println("getVersionInfo:"+getVersionInfo);
- //获取字节数组
- byte[] byteArray = resultv.getByteArray(0, vesionLen);
- //转化成字符
- System.out.println(new String(byteArray,"GB2312"));
- }
- }
- }
- 原文: http://blog.csdn.net/blog_abel/article/details/31404597
Java 调用 C/C++ 之 JNA 系列实战篇 —— 输出char * (六)的更多相关文章
- 《手把手教你》系列基础篇(九十六)-java+ selenium自动化测试-框架之设计篇-跨浏览器(详解教程)
1.简介 从这一篇开始介绍和分享Java+Selenium+POM的简单自动化测试框架设计.第一个设计点,就是支持跨浏览器测试. 宏哥自己认为的支持跨浏览器测试就是:同一个测试用例,支持用不同浏览器去 ...
- 3、Java调用C语言(JNA法)
这个方法挺方便的……(改写“二.Java调用C语言(JNative法)“的例子) 一.访问https://github.com/twall/jna ,下载jna-4.1.0.jar(版本不同名字不同) ...
- 《手把手教你》系列技巧篇(十六)-java+ selenium自动化测试-元素定位大法之By xpath下卷(详细教程)
1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大. 使用这种方法几乎可以定位到页面上的任意元素. ...
- Java 基础:认识&理解关键字 native 实战篇
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 泥瓦匠初次遇见 navicat 是在 java.lang.Object 源码中的一个hashCode方 ...
- Java调用net的webservice故障排除实战分享
转载地址:http://blog.sina.com.cn/s/blog_4c925dca01014y3r.html 前几天公司要接入国外公司的一个业务功能,对方是提供的net产生的webservice ...
- 多线程爬虫Java调用wget下载文件,独立线程读取输出缓冲区
写了个抓取appstore的,要抓取大量的app,本来是用httpclient,但是效果不理想,于是直接调用wget下载,但是由于标准输出.错误输出的原因会导致卡住,另外wget也会莫名的卡住. 所以 ...
- Java 程序该怎么优化?(实战篇)
面试官:出现了性能问题,该怎么去排查呢? 程序猿:接口响应那么慢,时间都花到哪里去了? 运维喵:为什么你的应用跑着跑着,CPU 就接近 100%? 分享一些真实生产问题排查故事,看看能否涨姿势,能否 ...
- [JNA系列]Java调用Delphi编写的Dll之实例Delphi使用PWideChar
Delphi代码 unit UnitDll; interface uses StrUtils, SysUtils, Dialogs; function DoBusinessWide(pvData: P ...
- [JNA系列]Java调用Delphi编写的Dll之实例Delphi使用PAnsiChar
Delphi代码 unit UnitDll; interface uses StrUtils, SysUtils, Dialogs; function DoBusinessAnsi(pvData: P ...
随机推荐
- 判断客户端是PC还是手持设备的JS代码【转】
1.第一种: 复制代码代码如下: function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = [&quo ...
- [Todo]非常好的免费IT书籍资源 & Github排名
今天看github排名,看到排在第二位的是免费书籍: https://github.com/vhf/free-programming-books/blob/master/free-programmin ...
- acle联机日志文件的维护
1.刷新重做日志缓存的时机 a.commit b.缓存满了 c.checkpoint,checkpoint的触发有两种机制: 定时触发,由log_checkpoint_interval[1]参数决定间 ...
- IDEA java开发 Restful 风格的WebService
官网:https://www.jetbrains.com/help/idea/restful-webservices.html 1.在IntelliJ中创建新项目,选择Java Enterprise ...
- UML分析设计顺序
1.用例图:最简单的模型,与设计无关 2.活动图:类似流程图 3.用例图:对1的细化,分解后的Actor及Use Case 4.用例图:分解后的Actor及抽取的数据实体 5.类图:数据结构图 6.顺 ...
- MVVM和MVC的区别,以及MVVM的缺点
MVVM和MVC的区别 MVC和MVVM的区别其实并不大.都是一种设计思想. 主要就是MVC中Controller演变成MVVM中的viewModel. MVVM主要解决了MVC中大量的DOM操作使页 ...
- 记一次vue2项目部署nginx静态文件404解决过程
github上下的一个vue2的项目,运行可以的,webpack打包后,nginx请求报错: 发现路径很奇怪啊,所以果断来到build.js文件中看看是不是哪里不对. 已经一番引用查找: 发现在这里配 ...
- 2018.1.9 博客迁移至csdn
http://blog.csdn.net/liyuhui195134?ref=toolbar
- redis学习笔记——RDB、AOF和复制时对过期键的处理
AOF.RDB和复制功能对过期键的处理 生成RDB文件 在执行SAVE命令或者BGSAVE命令创建一个新的RDB文件时,程序会对数据库中的键进行检查,已过期的键不会被保存到新创建的RDB文件中.举个例 ...
- git使用 ——转
转自:http://blog.csdn.net/jamesmf/article/details/17483787