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 __cplusplus
extern "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, jobject  obj, 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 ,jobject  obj, 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/295776  Java JNI 编程进阶
   http://www.iteye.com/topic/304594  JNI技术实践小结

你可能感兴趣的:(java,C++,c,C#,jni)