jni初级(一)

1.jni 是java与c++提供的接口,这个接口可以使c++与java进行交互。
2.在开发之前必须掌握java与c++技术。
3.使用开发工具 jdk  myeclipse   visual.

本地代码实现
1.写一个java类,使用jdk编译成.class文件,命令如下 :javac  XX.java.
2.将.calss文件编译成.h文件   命令如下:javah XX类名 (在jdk中bin目录中 javah可以将java生成c++).

3.将.h文件放入c++工程中。
4.jni.h和jni_md.h文件,这2个文件在java的jdk中,include包中win32中。因为在程序中要调用,所以必须引入,如果报错就是你没有正确引入的原因。

5.java生成的.h文件引入c工程的头文件,在源文件中创建c++文件即可。


source.cpp
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "..\jni.h"
/* Header for class TestNative */
/*注意:这里是引入文件,就是导包*/

#ifndef _Included_TestNative
#define _Included_TestNative
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     TestNative
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_TestNative_sayHello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

class source
{
public:
	source(void);
	~source(void);
};


TestNative.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include "..\jni.h"
/* Header for class TestNative */
/*注意:这里记得引入文件*/

#ifndef _Included_TestNative
#define _Included_TestNative
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     TestNative
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_TestNative_sayHello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

class source
{
public:
	source(void);
	~source(void);
};


TestNative.java
public class TestNative {
	
	public  native void  sayHello();

	public static void main(String [] args){
         //调用本地文件库“nativeCode”
	System.loadLibrary("nativeCode");
                  //创建对象
		TestNative t = new TestNative();
                  //调用sayHello();方法,做个动作。
		t. sayHello();	
		
	}
}

查看c++文件库,进入debug包中,可以看到生成的NativeCode.dll文件。
将c++项目中得debug路径放入path中,这样修改文件时就能动态调试。
使用javac 命令再次调用 java的.class文件,这时候可以发现结果:c++中的HelloWorld就能正确的在java中输出。(参考附件图5)


大家注意一点: native 是声明与c++交互的一个标志,sayHello();是一个方法。

附件有参考图片,只供参考,如有问题,请留言。

猜你喜欢

转载自wangjinlongaisong-126-com.iteye.com/blog/1308439
今日推荐