码迷,mamicode.com
首页 > 其他好文 > 详细

JNI 回调小记

时间:2014-07-16 21:38:29      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:style   blog   java   color   io   代码   

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);
}

 

JNI 回调小记,布布扣,bubuko.com

JNI 回调小记

标签:style   blog   java   color   io   代码   

原文地址:http://www.cnblogs.com/toosuo/p/3835889.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!