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 ...
随机推荐
- XmlRpc with C#/Java【转】
最近看了几个项目都是用xmlrpc协作完成的,就做了几个测试客户端和服务器端和大家一起分享.希望能对入门的同学有帮助 关于xmlrpc的介绍和规范参考http://www.xml-rpc.net/ 下 ...
- Apache2.4 与 php7.1.6的链接
首先Apache已经安装成功,在浏览器中能够打开再下载php 我的Apache安装版本为Apache2.4.26 x64 vc14 所以我php也应该是vc14编译的 php下载地址为 http:// ...
- 往aws中的s3上传数据
在官网下载对应的sdk http://aws.amazon.com/cn/sdk-for-net/ 然后再aws上为s3上的bucket生成密钥对 access_key和secret_key 调用对应 ...
- 【Python】装饰器实现日志记录
好的日志对一个软件的重要性是显而易见的.如果函数的入口都要写一行代码来记录日志,这种方式实在是太低效了,但一直没有找到更好的方法.后来用python写一些软件,了解到python的装饰器功能时,突然人 ...
- 【架构】使用OpenStack、AliYun、AWS、Docker打造融合的IAAS、PAAS平台
GalaxyManager,即平台门户,旨在整合数据中心异构虚拟化资源为统一的资源池,并在资源池上为用户提供各类IAAS.PAAS服务. GitHub:https://github.com/junne ...
- angular 的进一步深入理解
早上同事问我个问题,angular 的表单验证有没有啥第三方库可以用? 这个问题,我想了下,之前我做的表单验证好像也没用到第三方的库来验证,直接用angular 内置的 directive 就可以搞定 ...
- EffectiveJava(28)怎么利用有限制的通配符类型来提升API的灵活性
有时候,我们需要的灵活性要比不可变类型所能提供的更多.所以针对一些通用性的方法,通常用泛型代替固定的数据类型,特别是当你要将某个方法打包成Jar的时候. 结合之前的例子,我们增加尝试用有限制的通配符类 ...
- Android常用传感器用法一览(2)
在Android2.3 gingerbread系统中,google提供了11种传感器供应用层使用. #define SENSOR_TYPE_ACCELEROMETER 1 //加速度#de ...
- 网页图表控件Highcharts选项配置参数
Highcharts提供大量的选项配置参数,您可以轻松定制符合用户要求的图表,目前官网只提供英文版的开发配置说明文档,而中文版的文档网上甚少,且零散不全.这里,我把Highcharts常用的最核心的参 ...
- PHP和数据访问之(插入。删除。和更新数据)
插入: <?php $conn=@new mysqli('localhost','root','123','mytestdb'); $q_str=<<<EOM insert i ...