怎样在jni中转换“public String myrun2(String name)”函数

一名程序员 2010-05-14 09:59:09
在java语言中,函数原型是这样的:
public String myrun2(String name)

我在jni的C代码中调用是这样的:
    MID_ifoo = (*env)->GetMethodID (env, myClassInDll, "myrun2", "(Ljava/lang/String;)Ljava/lang/String;");

if (!MID_ifoo) {
// printf("Error: MyClassInDll.ifoo() not found\n");
MessageBox(NULL,"Error: MyClassInDll.myrun2() not found","Error", MB_OK);
return;
}

(*env)->CallVoidMethod (env, obj, MID_ifoo);

现在GetMethodID执行成功,而CallVoidMethod执行无效果,我想问一下:应该用jni中的什么函数(肯定不是CallVoidMethod)激发myrun2函数呢?
...全文
38 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuxibang 2010-05-14
  • 打赏
  • 举报
回复
CallVoidMethod方法只能调用返回值为void的方法,你的public String myrun2(String name)返回值为string,因为JNI没有提供CallStringMethod这个方法,所以我们用CallObjectMethod这个方法然后再转为 jstring。
jstring xxx= (jstring)env->CallObjectMethod(obj, MID_ifoo ));

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧