Java 调用 C/C++ 之 JNA 系列实战篇 —— 输出wchar_t* (三)

一、 工作环境

            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"
{

/*
功能 :		获取相关参数

输入参数	param		参数名称
输出参数	value		参数值
输出参数	paramlength	参数长度
*/
Public int GetParam(const wchar_t* param, wchar_t* value, int* paramlength);

}

      2. Java调用代码:接口CFJna.java

package cn.jna.test;


import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.WString;
import com.sun.jna.ptr.IntByReference;

public interface CFJna extends Library {

	//加载动态资源库
	CFJna library = (CFJna) Native.loadLibrary("TestCF", CFJna.class);
	
	//定义要调用的方法,与cf.h头文件中定义的函数名一样
	/*Public int GetParam(const wchar_t* param, wchar_t* value, int* paramlength);*/ //cf.h头文件
	int GetParam(WString param, Pointer value, IntByReference paramLength);
}

       3. 测试调用:CFJnaTest.java

package cn.jna.test;

import com.sun.jna.Pointer;
import com.sun.jna.WString;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;

public class CFJnaTest {

	public static void main(String[] args) {

		//方法所需参数
		Pointer value = new PointerByReference().getPointer();
		IntByReference paramLength = new IntByReference();
		
		int getParam = CFJna.library.GetParam(new WString("clip_time"), value, paramLength);
		System.out.println("getParam:"+getParam);
		
		//取出结果值
		String paramValue = value.getWideString(0);
		//结果长度
		int valueLen = paramLength.getValue();
		System.out.println("paramValue:"+paramValue);
		System.out.println("valueLen:"+valueLen);
	}

}

收尾 请继续关注,或关注我的新浪微博:微博Abel


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值