JNI Demo实现(基于IEDA,VS2008)
一、简介:
JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)
二、步骤概要:
- 编写带有native声明的方法的java类
- 使用IDE或javac命令编译所编写的java类
- 使用javah + java类名生成扩展名为h的头文件
- 使用C/C++实现本地方法
- 将C/C++编写的文件生成动态连接库(DLL)
- ok,搞定,可以运行java程序了
三、详细步骤:
以打印Hello world为例,已完成的工程目录:(out是我这边构建项目后生成的,请忽略)
第一步:编写java代码:
1 public class JNIDemo { 2 //定义一个方法,该方法在C++中实现 3 public native void testHello(); 4 5 public static void main(String[] args){ 6 //加载C++文件(dll文件) 7 System.loadLibrary("TestJNI"); 8 JNIDemo jniDemo = new JNIDemo(); 9 jniDemo.testHello(); 10 } 11 }
第二步:使用IDEA对java项目进行编译,然后进入java类JNIDemo目录中,使用javah对生成的JNIDemo.class进行处理,生成JNIDemo.h文件,命令如下:
javah JNIDemo
第三步:使用vs 2008编写c++方法,如下:
1.选择文件-》新建-》项目
2.选择 win32项目,输入 名称,然后点击确定
3.后续点击下一步进入下图,选择DLL,这样就创建完成了
第四步:生成项目目录如下:
第五步:在源文件目录上右键,创建一个类:
第六步:在你的JDK目录的include目录下有一个jni.h的文件,include的win32目录下有个jni_md.h文件,还有java工程的中之前生成的JNIDemo.h文件,一起拷贝到C++工程的TestJNI目录下:
当前目录为工程目录:
第七步:在头文件目录上右键,添加刚刚复制的.h头文件(jni.h、jni_md.h、JNIDemo.h)
第八步:打开JNIDemo.h,将#include <jni.h>调整为#include "jni.h"
第九步:在TestJNI.cpp添加如下代码:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include "jni.h" /* Header for class JNIDemo */ #ifndef _Included_JNIDemo #define _Included_JNIDemo #ifdef __cplusplus extern "C" { #endif /* * Class: JNIDemo * Method: testHello * Signature: ()V */ JNIEXPORT void JNICALL Java_JNIDemo_testHello (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
第十步:配置C++工程,在解决方案上右键,选择属性
作如下配置,如果为32位的系统则可以使用win32:
第十一步:在解决方案上右击,生成解决方案
第十二步:在C++项目中可以看到生成的TestJNI.dll文件,在IDEA中点击File->Project Structure...,
然后将生成的TestJNI.dll加入到Libraries中
第十三步:右键运行java程序,可以看到执行的结果