JNI 调 C C++ 参数String
首先编译java的类。 类中方法必须是 native得到.class文件。
然后 javah HelloJni
得到 HelloJni.h 文件 这个文件是c c++的头文件。通过它可以调用c的dll工程
jni.h是jdk下面的 我的路径是E:\jdk5\include里面的.h文件 dll工程都需要。
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class HelloJni */#ifndef _Included_HelloJni#define _Included_HelloJni#ifdef __cplusplusextern "C" {#endif/* * Class: HelloJni * Method: getInt * Signature: (I)I */JNIEXPORT jint JNICALL Java_HelloJni_getInt(JNIEnv *, jobject, jint);/* * Class: HelloJni * Method: getString * Signature: (Ljava/lang/String;)Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_HelloJni_getString(JNIEnv *, jobject, jstring);#ifdef __cplusplus}#endif#endif
// org_danlley_jni_test_HelloJniTest.cpp: implementation of the org_danlley_jni_test_HelloJniTest class. // ////////////////////////////////////////////////////////////////////// #include "HelloJni.h" #include <jni.h> #include <stdio.h> /* * Class: HelloJni * Method: getInt * Signature: (I)I */JNIEXPORT jint JNICALL Java_HelloJni_getInt (JNIEnv *env, jobjectobj, jint i){ i*=i; return i;}/* * Class: HelloJni * Method: getString * Signature: (Ljava/lang/String;)Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_HelloJni_getString(JNIEnv * env ,jobjectobj, jstring prompt){const char* str; str = (*env)->GetStringUTFChars(env, prompt, 0);//调c写法//c++写法 str = env->GetStringUTFChars(prompt, 0); if(str == NULL) { return NULL; /* OutOfMemoryError already thrown */ } (*env)->ReleaseStringUTFChars(env,prompt, str); //const char* tmpstr = "return string succeeded"; return (*env)->NewStringUTF(env,str);}
下面附上我自己跑的工程。java工程 放在eclipes下面可以跑。
参考博客:http://www.iteye.com/topic/295776Java JNI 编程进阶
http://www.iteye.com/topic/304594JNI技术实践小结
页:
[1]