jna 调用DLL文件如何获取C++中引用传递的参数

xiaohui_pu 2013-02-26 04:57:23
这两天在研究JNA调用DLL开发,给的读卡器的DLL文件的访问方法全部都是返回一个数字标识,
而有些返回信息是参数引用传递,在jna中怎么获取到引用传递的参数?
...全文
442 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
洛川子 2015-02-27
  • 打赏
  • 举报
回复
其实就是转换成指针。稀里糊涂就成功了。 但是如果是整型的引用,使用IntByReference却无法实现。尚未搞清楚
洛川子 2015-02-27
  • 打赏
  • 举报
回复
经过测试。实现了对struct的引用调用。 c++:
typedef struct CTest{
	int val;
}CTest;
void GetStructyinyong(CTest& yinyong)
{
	yinyong.val = 22;
}
java:
package hk_dvr;

import java.util.ArrayList;
import java.util.List;

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.PointerType;
import com.sun.jna.Structure;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;

public class DVR {
	public interface CLibrary extends Library {
		public static class CTest extends Structure{
			public static class ByReference extends CTest implements Structure.ByReference{}
			public int val;
			@Override
			protected List<String> getFieldOrder() {
				// TODO Auto-generated method stub
				List<String> a = new ArrayList<String>();
				a.add("val");
				return a;
			}
		}		
		void GetStructyinyong(CTest.ByReference yinyong);
	}

	public static void main(String[] args) {
		// 载入DLL
		CLibrary Clib = (CLibrary) Native.loadLibrary("Test", CLibrary.class);
		//引用测试
		CLibrary.CTest.ByReference yinyong = new CLibrary.CTest.ByReference();
		yinyong.val = 88;
		//yinyong.write();
		Clib.GetStructyinyong(yinyong);
		System.out.println(yinyong.val + "");
		System.out.println("END!");
	}
}
输出结果:22.可见,获取到了引用的数值
洛川子 2015-02-10
  • 打赏
  • 举报
回复
同求。。。不知道怎么解决
xiaohui_pu 2013-02-27
  • 打赏
  • 举报
回复
没人管,自己顶一个。。。

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧