JNI Demo实现(基于IEDA,VS2008)

 

一、简介:

  JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++

二、步骤概要:

  1. 编写带有native声明的方法的java类
  2. 使用IDE或javac命令编译所编写的java类
  3. 使用javah + java类名生成扩展名为h的头文件
  4. 使用C/C++实现本地方法
  5. 将C/C++编写的文件生成动态连接库(DLL)
  6. 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程序,可以看到执行的结果

  

原文地址:https://www.cnblogs.com/aimed/p/10087888.html