您的位置:首页 > 其它

jnative 从指针中获得传出值

2015-08-08 17:48 447 查看
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());
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: