`

JNative中给DLL传入数组

阅读更多

// 调用DLL,取出数组中的最大值
public voic fnGetMax(int[] arrInt) {

	try
	...
	...

	// 创建JNative对象
	JNative jnative = JNative("test.dll","fnGetMax");

	// 为数组创建空间
	Pointer aArrIntInput = new Pointer(MemoryBlockFactory.createMemoryBlock(4 * arrInt.length));

	// 初始化数组
	for (int i = 0; i < arrInt.length; i++) {
		aArrIntInput.setIntAt(4 * i, arrInt[i]);
	}

	// 设定传入参数
	jnative.setParameter(0, pArrIntInput); // 数组指针
	jnative.setParameter(1, arrInt.length); // 数组大小

	// 设定返回类型
	jnative.setRetVal(Type.INT);

	// 调用DLL
	jnative.invoke();

	// 打印返回值
	int iRet = jnative.getRetValAsInt();
	System.out.println(iRet);

	catch
	...
	...
}


double的场合
// 传入和返回类型是double
double dParam = 10.23;
...
...
jnative.setParameter(0, Type.DOUBLE, Stirng.valueOf(dParam));
...
jnative.setRetVal(Type.DOUBLE);
...
String dRet = jnative.getRetVal();
System.out.println(dRet);
0
2
分享到:
评论
6 楼 tjmljw 2012-05-22  
kidding87 写道
好的,搞java没有,像C、C++搞过内存分配这块的东西
JNative也是瞎子摸象啊,官方的文档也没什么,就几个sample


这是JNative 1.3的文档,找不到1.4的了,凑合看下吧,一起摸索前进。
http://jnative.free.fr/docs/
5 楼 kidding87 2012-05-22  
好的,搞java没有,像C、C++搞过内存分配这块的东西
JNative也是瞎子摸象啊,官方的文档也没什么,就几个sample
4 楼 tjmljw 2012-05-22  
kidding87 写道
这句好像就是java通过调用JNative.dll来分配内存
 Pointer aArrIntInput = new Pointer(MemoryBlockFactory.createMemoryBlock(4 * arrInt.length)); 
 


http://www.iteye.com/problems/83386#solutions
这个是我最近提的一个问题,你可以试试你的代码加上个比较大的循环,看有没有OOM


我试过了,一千万的循环下,没出现内存问题。
另外我看了你的代码,猜测几个地方可能存在问题,你可以试一试。

// 把下面代码中的100修改为实际需要内存的大小
Pointer p = new Pointer(MemoryBlockFactory.createMemoryBlock(100));


// 我没有用到这个释放内存的方法,而你的代码恰恰是这个方法中抛出了异常
// 试着注释掉这个方法试一试
JNative.freeMemory(p.getPointer()); 


// 去掉下面的方法
p.zeroMemory();


JNative我也是头一次接触,不知道能不能帮你解决问题,希望以后我们能互相帮助。
3 楼 kidding87 2012-05-19  
这句好像就是java通过调用JNative.dll来分配内存
 Pointer aArrIntInput = new Pointer(MemoryBlockFactory.createMemoryBlock(4 * arrInt.length)); 
 


http://www.iteye.com/problems/83386#solutions
这个是我最近提的一个问题,你可以试试你的代码加上个比较大的循环,看有没有OOM
2 楼 tjmljw 2012-05-18  
kidding87 写道
不知道楼主遇到这个内存无法释放的问题没有


目前只是调查Java调用C的方法,还没有遇到内存方面的问题。
1 楼 kidding87 2012-05-18  
不知道楼主遇到这个内存无法释放的问题没有

相关推荐

Global site tag (gtag.js) - Google Analytics