liuzl121 2012-09-06 22:46
浏览 246
已采纳

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应该是一个空的图片,但是结果不是,想问下这是怎么一回事。说的直白一点。

  • 写回答

1条回答 默认 最新

  • _1_1_7_ 2012-09-07 08:50
    关注

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发