jnative 从指针中获得传出值

4 篇文章 0 订阅
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
import org.xvolks.jnative.misc.basicStructures.AbstractBasicData;
import org.xvolks.jnative.pointers.Pointer;
import org.xvolks.jnative.pointers.memory.MemoryBlockFactory;

public class PointerParam extends AbstractBasicData<PointerParam> {

	public String retValue;// 返回的参数

	protected PointerParam() throws NativeException {
		super(null);
		createPointer();
	}

	/**
	 * 分配内存,并返回指针
	 */
	public Pointer createPointer() throws NativeException {
		pointer = new Pointer(MemoryBlockFactory.createMemoryBlock(getSizeOf()));
		return pointer;
	}

	/**
	 * 内存大小
	 */
	public int getSizeOf() {
		return 1024;
	}

	/**
	 * 获取通过内存指针解析出结果
	 */
	public PointerParam getValueFromPointer() throws NativeException {

		retValue = getNextShort() + "";
		return this;
	}

	public String toString() {

		return retValue + "";
	}

	public static void main(String[] args) throws NativeException,
			IllegalAccessException {
		// 创建对象
		PointerParam pointerParam = new PointerParam();
		// 1.加载cpp
		System.loadLibrary("JNativeCpp");
		// 2.加载动态库
		JNative jNative = new JNative(System.getProperty("user.dir")
				+ "\\T9Sender.dll", "T9GetNetAdapterCount");
		// 3.设置返回参数的类型 没有它不出值
		jNative.setRetVal(Type.INT);
		// 4.设置要调用方法中的参数:0 表示第一个以此类推
		Pointer param1 = pointerParam.getPointer();
		// 5.设置参数
		jNative.setParameter(0, param1);
		// 6.执行方法
		jNative.invoke();
		System.out.println("调用的DLL文件名为:" + jNative.getDLLName());
		System.out.println("调用的方法名为:" + jNative.getFunctionName());
		// 7.返回值
		System.out.println("指针中返回的参数:" + pointerParam.getValueFromPointer());
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值