JNI 调用GetMethodID 获得System.out.println()方法的jmethodid时出错的问题。

JNI 调用GetMethodID 获得System.out.println()方法的jmethodid时出错的问题。,第1张

应该是没有问题的,jni是支持重载方法的,他是把重载方法转换成C语言的两个不同方法,方法名是不一样的。我怀疑你的问题是由于dll没有用最新的。你可以把sayhello方法名修改成display,然后重新走一遍jni的 *** 作过程,看看是什么效果。

下面是这个问题和你是一样的

对于java传递进来的java对象模型,c要加载java类的原型,根据创建相应的c对象,获取java对象的方法的id,然后调用java对象的方法。比如有个java类customer对象作为jni参数传递到c程序,customer有方法String getName()。

JNIEXPORT jobject JNICALL Java_com_oracle_estt_sc_db_impl_SCQueryODBC__1getCustomer

(JNIEnv env, jobject, jobject customer){

jmethodID methodId;

//获得customer对象的句柄

jclass cls_objClass=env->GetObjectClass(customer);

//获得customer对象中特定方法getName的id

methodId=env->GetMethodID(cls_objClass,"getName","()Ljava/lang/String;");

//调用customer对象的特定方法getName

jstring js_name=(jstring)env->CallObjectMethod(customer,methodId,NULL);

}

然后C向java传递对象方法如下:

JNIEXPORT jobject JNICALL Java_perfecter_jni_LoadJni_getJavaObj(JNIEnv env,

jobject obj){

jclass clazz=env->FindClass("perfecter/jni/MyObj");

if(clazz==0)

return 0;

jobject jobj=env->AllocObject(clazz);

jfieldID fieldId=env->GetFieldID(clazz,"name","Ljava/lang/String;");

env->SetObjectField(jobj,fieldId,env->NewStringUTF("wahaha"));

return jobj;

}

java对应的native方法申明public static native MyObj getJavaObj();

以上就是关于JNI 调用GetMethodID 获得System.out.println()方法的jmethodid时出错的问题。全部的内容,包括:JNI 调用GetMethodID 获得System.out.println()方法的jmethodid时出错的问题。、java 通过jni 向 c 传递一个 java 对象, c 如何取得这个对象的属性值、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9381079.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存