我用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.如何获取到输出参数的值。 

解决方案 »

  1.   

    java中不支持指针,你需要把指针解析成数据传给java。
    获得指针或者函数返回值,你可以使用jni的api来实现,关于api你可以去查看api文档,在jdk帮助文档中有,记住,要英文的,因为中文的jdk帮助文档没有jni的相关内容。
      

  2.   

    这里有篇关于指针传递的文章,可以去看看!
    http://www.szstudy.cn/showArticle/52759.shtml
      

  3.   

    我的c++ 函数如下:
    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,请高手指教?