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

 

相关文章:

  • 2021-11-19
  • 2021-11-13
  • 2021-10-29
  • 2022-02-17
  • 2022-03-04
  • 2021-05-23
  • 2021-09-02
猜你喜欢
  • 2021-12-20
  • 2022-12-23
  • 2021-11-17
  • 2021-10-02
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案