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++共享并可以操作它,赋值后,内存中的数据就变了。

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

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

报告相同问题?

悬赏问题

  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型