Java JNI的一些问题

 

楼主最近想要用Java调用c++封装的dll文件,里面的接口和参数列表都知道,也有这个dll的头文件,也通过Javah生成了.h的头文件,有个问题想不通,我的Java native方法中传递进去一个byte数组,里面都是0就是一个空图片,然后调用接口给图片数组赋值,但是接口定义的返回值类型是int类型的,也就是操作成功或失败的代码,但是如果成功了 byte数组里面就会有值了,我想不明白这个byte数组里的值是怎么得到的,Java里不想C++里面有指针,那数组里面的值是怎么传回来的呢?大概的方法就是这样的

//native 方法
public static  native int getPic(String path,byte[] picByte);
//调用

public byte[] getPicFromCPP(String path){
     byte[] pic = new byte[1024*1024*2];
     int  flag = getPic(path,pic);
     if(flag != 0){//0就是返回成功 如果返回失败就继续调用直到成功
       flag = getPic(path,pic);
     }
     return  pic
}

 

如果调用成功了这个pic就会有值了,我对这个很奇怪,按照Java的方式去考虑,返回的pic应该是一个空的图片,但是结果不是,想问下这是怎么一回事。说的直白一点。

byte[] pic = new byte[1024*1024*2];
java申请了一片内存空间,c++共享并可以操作它,赋值后,内存中的数据就变了。

你给人一个空桶,别人装满水后再给你,桶是同一个桶,不可能到你手后又变空桶了。