求助jni调用java接口

fcsong000833 发布于 2013/10/22 14:20
阅读 286
收藏 0
JNI

测试本地C代码通过jni调用C总失败,请大牛们指点:

Java代码中定义:

public int jnitest1(String a){
 return 1;
  }


C代码中定义:

jint Java_com_example_elmTest(JNIEnv* env, jobject obj){

jclass cls = (*env)->GetObjectClass(env,obj);
if(cls == NULL){
     return 1;
}
jmethodID test1 = (*env)->GetMethodID(env, cls, "jnitest1","(Ljava/lang/String;)I");//执行到这里程序崩溃,后面代码还未得到测试
if(test1 == NULL){
return 2;
}
jint intresult = (*env)->CallIntMethod(env,obj, test1,"test ...");
if(test2 == NULL){
     return 3;
}

return 0;

}


加载中
0
地瓜儿
地瓜儿
该评论暂时无法显示,详情咨询 QQ 群:点此入群
fcsong000833
fcsong000833
这是C++写法 转成C和我上面的写法没什么区别吧
0
wad12302
wad12302

如果jni 难以转化 可以借助第三方组件

jnative 等待 java调用dll的组件

wad12302
wad12302
回复 @fcsong000833 : android 里面不知道是dll 还是 so 是可以调用的, 现在你是要java 调用 dll 还是c 调用dll?
fcsong000833
fcsong000833
代码在android上跑 能用dll么? 而且C代码中必须是主动调用Java接口
0
figer1
figer1

每次调用完JNI函数,都这么搞一下:

if( ( (*env)->ExceptionCheck() == JNI_TRUE ) || ( test1 == NULL ) ){
	(*env)->ExceptionDescribe();
	(*env)->ExceptionClear();
	return 2;
}

fcsong000833
fcsong000833
虽然不明白为什么 不过可以试下 谢谢
0
obaniu
obaniu
该评论暂时无法显示,详情咨询 QQ 群:点此入群
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部
返回顶部
顶部