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();是一个方法。
附件有参考图片,只供参考,如有问题,请留言。
- 大小: 190.5 KB
- 大小: 37.1 KB
- 大小: 21.9 KB
- 大小: 46.3 KB
- 大小: 43.4 KB