首先编译java的类。 类中方法必须是 native
得到.class文件。
然后 javah HelloJni
得到 HelloJni.h 文件 这个文件是c c++的头文件。通过它可以调用c的dll工程
jni.h是jdk下面的 我的路径是E:\jdk5\include 里面的.h文件 dll工程都需要。
下面附上我自己跑的工程。java工程 放在eclipes下面可以跑。
参考博客: [url]http://www.iteye.com/topic/295776[/url] Java JNI 编程进阶
[url]http://www.iteye.com/topic/304594[/url] JNI技术实践小结
得到.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下面可以跑。
参考博客: [url]http://www.iteye.com/topic/295776[/url] Java JNI 编程进阶
[url]http://www.iteye.com/topic/304594[/url] JNI技术实践小结