我用Jnative调用c++动态链接库中的函数,具体问题如下:
我的c++ 函数是:int FaceRecognition(CString PicPath, int PicNum, int* AllFaceFea, int* ThisFaceFea,int* ImageH, int* ImageW, int* FaceOrder,float* ScoreOrder);
其中输入参数是:PicPath,PicNum,AllFaceFea,ThisFaceFea
在调用此方法后,希望得到的输出参数是:ImageH,ImageW,FaceOrder,ScoreOrder
请指教:
1.在传递参数时,我怎么在Java程序中传递指针参数;
2.如何获取到输出参数的值。
我的c++ 函数是:int FaceRecognition(CString PicPath, int PicNum, int* AllFaceFea, int* ThisFaceFea,int* ImageH, int* ImageW, int* FaceOrder,float* ScoreOrder);
其中输入参数是:PicPath,PicNum,AllFaceFea,ThisFaceFea
在调用此方法后,希望得到的输出参数是:ImageH,ImageW,FaceOrder,ScoreOrder
请指教:
1.在传递参数时,我怎么在Java程序中传递指针参数;
2.如何获取到输出参数的值。
获得指针或者函数返回值,你可以使用jni的api来实现,关于api你可以去查看api文档,在jdk帮助文档中有,记住,要英文的,因为中文的jdk帮助文档没有jni的相关内容。
http://www.szstudy.cn/showArticle/52759.shtml
extern "C" int add(int* a,int* b,int* c)
{
a = new int[10];
b = new int[10];
c = new int[10];
for(int i=0;i<10;i++)
{
c[i]=a[i]+b[i];
}
return 1;
}用Jnative调用的代码如下: JNative t = new JNative("test.dll", "add");
Pointer a = new Pointer(MemoryBlockFactory.createMemoryBlock(4*10));
Pointer b = new Pointer(MemoryBlockFactory.createMemoryBlock(4*10));
Pointer c = new Pointer(MemoryBlockFactory.createMemoryBlock(4*10));
for(int i=0;i<10;i++){
a.setIntAt(4*i, i);
b.setIntAt(4*i, i);
}
t.setRetVal(Type.INT);
t.setParameter(0,a);
t.setParameter(1, b);
t.setParameter(2, c);
t.invoke();
for(int j=0;j<10;j++){
System.out.println(c.getAsInt(4*j));
}
System.out.println("return value="+t.getRetValue());
a.dispose();
b.dispose();
t.dispose();
执行结果:
0
0
0
0
0
0
0
0
0
0
1郁闷的是已经得到了函数的返回值,可是函数中输入变量C的值,得到的都是0,请高手指教?