首页 > 代码库 > JNI 回调小记
JNI 回调小记
javah在eclipse中设置参数:location(javah.exe的位置)working dir(${project_loc}/src)
-classpath .;./classes -d ${project_loc}\jni -jni ${java_type_name}
回调的java代码
public class HelloWorld { static { System.loadLibrary("jnidemo"); } public void myCallbackFunc(String nMsg) { Log.v("EagleTag", "back message:" + nMsg); } private void throwException() throws NullPointerException { throw new NullPointerException("Null pointer"); } public native String DisplayHello(String inputStr);}
C代码
jstring JNICALL Java_com_example_jnidemo_HelloWorld_DisplayHello(JNIEnv *env, jobject obj, jstring what) { const jbyte *l_what; char *result; l_what = (*env)->GetStringUTFChars(env, what, NULL); if (l_what == NULL) { return NULL; /* OutOfMemoryError already thrown */ } result = malloc(strlen(l_what) + 6); if (result == NULL) { return NULL; } sprintf(result, "中文reiver %s", l_what); //回调 char tChar[256]; gJniClass = 0; gJinMethod = 0; gJniClass = (*env)->GetObjectClass(env, obj); if (gJniClass == 0 || gJniClass == NULL) return (*env)->NewStringUTF(env, "-1"); gJinMethod = (*env)->GetMethodID(env, gJniClass, "myCallbackFunc", "(Ljava/lang/String;)V"); if (gJinMethod == 0 || gJinMethod == NULL) return (*env)->NewStringUTF(env, "-2"); strcpy(tChar, result); (*env)->CallVoidMethod(env, obj, gJinMethod, (*env)->NewStringUTF(env, tChar)); return (*env)->NewStringUTF(env, result);}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。