Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1737543
  • 博文数量: 347
  • 博客积分: 9328
  • 博客等级: 中将
  • 技术积分: 2680
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-29 23:45
文章分类

全部博文(347)

文章存档

2016年(1)

2013年(4)

2012年(207)

2011年(85)

2010年(50)

分类: C/C++

2012-05-19 23:58:07

1,C++回调Java函数时,传递给Java的参数不能为C++的局部栈变量,因为C++函数跳出时立即回收了此变量,Java的回调函数中无法访问此变量,此时JVM会崩溃(Crash),并抛出异常:EXCEPTION_ACCESS_VIOLATION处理方式为:使用JNIEnv*提供的New接口复制数据,再传递给Java函数;或者确保这个变量是堆对象,不过C++自己new出来的堆对象貌似也不能直接传给Java,应该还是需要通过JNIEvn*提供的接口复制一份JNI的参数类型再传给Java


2,Java的byte[]参数类型对应JNI中的jbyteArray参数类型,在C++中不能将jbyteArray强制转换为char*,可以先获取jbyte* byteArr = env->GetByteArrayElements(jbyteArray, false);,再将jbyte*强转转换为char*。char* charArr = (char*)byteArr;


3,C++调用JNI的New接口生成的对象,如果不传给Java,需要手动调用Release接口,否则会导致内存泄露,若传给Java就不用Release,JVN会自动回收

阅读(1879) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~