除了你无可取代 发表于 2013-2-5 02:11:20

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]
查看完整版本: JNI 调 C C++ 参数String