jni初级(一)_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > jni初级(一)

jni初级(一)

 2011/12/14 10:08:29  高级java工程师  http://wangjinlongaisong-126-com.iteye.com  我要评论(0)
  • 摘要:1.jni是java与c++提供的接口,这个接口可以使c++与java进行交互。2.在开发之前必须掌握java与c++技术。3.使用开发工具jdkmyeclipsevisual.本地代码实现1.写一个java类,使用jdk编译成.class文件,命令如下:javacXX.java.2.将.calss文件编译成.h文件命令如下:javahXX类名(在jdk中bin目录中javah可以将java生成c++).3.将.h文件放入c++工程中。4.jni.h和jni_md.h文件
  • 标签:
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
  • 查看图片附件
  • 相关文章
发表评论
用户名: 匿名