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 ...
随机推荐
- go语言基础之常量
1.常量 示例: package main //必须有一个main包 import "fmt" func main() { //变量:程序运行期间,可以改变的量, 变量声明需要va ...
- js调用高德地图的搜索api
var city = $('#city')[0].value; AMap.plugin(['AMap.Autocomplete'],function(){ var autoOptions = { ci ...
- asp.net 大文上传配置
配置iis的文件上传大小控制: 今天先说一个问题,在window server2008 下配置上传文件的大小,除了工程自身的config外还需要配置一下服务器上的applicationhost.con ...
- UVa 164 - String Computer
题目:编辑距离.给你两个串,将已知串转化成目标串,能够增.删.改字母,求最小操作次数. 分析:dp,编辑距离.同最大公共子序列. 注意操作位置是实时变化的. (前面都已经处理好了) ...
- pgsql常用命令
连接数据库, 默认的用户和数据库是postgres psql -U user -d dbname 切换数据库,相当于mysql的use dbname \c dbname 列举数据库,相当于mysql的 ...
- set_exception_handler 自定义异常处理
该函数用于创建运行时期间的用户自己的异常处理方法. set_exception_handler(error_function) 参数 必需.规定未捕获的异常发生时调用的函数. 该函数必须在调用 set ...
- gensim自然语言处理(续)
上一篇,已经实现了如何将一条语句在一个语料库中比较相似度, 发现运行的时候每次都要编译语料库,通过查找资料,可以一次性编译成预料库,存人文件 编译语料库代码 11_k.py import sysimp ...
- 算法笔记_160:算法提高 约数个数(Java)
目录 1 问题描述 2 解决方案 1 问题描述 输入一个正整数N (1 样例输入 12 样例输出 6 样例说明 12的约数包括:1,2,3,4,6,12.共6个 2 解决方案 具体代码如下: im ...
- Win10注销在哪?怎么注销电脑
进入Win10电脑桌面,同时按住键盘上的[Alt]+[F4]组合快捷键,可以快速呼出[关闭Windows]操作选项,在下面的"您希望计算机所什么"里选择[注销],然后点击底部的[确 ...
- JDBC:数据库操作:处理大对象CLOB数据
目标: 了解大对象处理基本原理, 掌握CLOB数据的读,写操作. 可以使用CLOB类处理大文本数据. 大对象处理主要指CLOB和BLOB两种类型字段.可以大量存储文字. 要想在程序中处理这样的大数据操 ...