JNI Demo实现(基于IEDA,VS2008)

it2025-05-22  72

 

一、简介:

  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程序,可以看到执行的结果

  

 

转载于:https://www.cnblogs.com/aimed/p/10087888.html

最新回复(0)