「jni获取java类」jni实现

博主:adminadmin 2023-01-13 16:18:06 243

本篇文章给大家谈谈jni获取java类,以及jni实现对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

浅谈如何用JNI的代码调用java接口

对于本地函数

JNIEXPORT void JNICALL Java_video1_TestNative_sayHello(JNIEnv * env, jobject obj)

{

cout"Hello Native Test !"endl;

}

JNIEnv类型代表Java环境。通过这个JNIEnv*指针,就可以对Java端的代码进行操作。如,创建Java类得对象,调用Java对象的方法,获取Java对象的属性等。

JNIEnv的指针会被JNI传送到本地方法的实现函数中来对Java端的代码进行操作

JNIEnv类中的函数:

NewObject/NewString/NewTYPEArray :new新对象

Get/SetTYPEField:获取属性

Get/SetStaticTYPEField :获取静态属性

CallTYPEMethod/CallStaticTYPEMethod

android jni中怎么得到java类实例

对于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中在被调用的C/C++函数中如何访问Java程序中的类,并编写应用

调用JNI时候 第一个参数

JNIEnv* env

通过这个

调用

jmethodID mid=env-GetMethodID 参数列表自己百度下

然后用env-NewObject 调用java的方法。

如果只是使用类 那就更简单了

env-FindClass 找到类标识

env-GetFieldID 获取类成员id

env-SetIntField /env-SetBooleanField 等等一系列函数赋值。

jni获取java类的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于jni实现、jni获取java类的信息别忘了在本站进行查找喔。