使用Java中的JNI技术将C/C++程序嵌入到Java代码中实现Hello World

JNI技术简介

JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。例如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少要保证本地代码能工作在任何Java 虚拟机环境下。

例子:使用Java中的JNI技术将C/C++程序嵌入到Java代码中实现Hello World

任务

使用Java中的JNI技术将C/C++程序嵌入到Java代码中实现Hello World

工具

UEStudio 15,JDK1.7(32bit),VC6.0

步骤

1.使用UEStudio创建TestJNI.java,并编写以下代码:

package com.kang;
public class TestJNI
{
    public native void sayHello();//native代表本地代码(即C/C++代码)
    public static void main(String[] args)
    {//此处代码后续补入
    }
}

2.在cmd中切换到TestJNI.java所在目录,并输入:

javac -d . TestJNI.java
javah com.kang.TestJNI

此时会生成一个com文件夹和一个com_kang_TestJNI.h文件。说明成功。
3.打开VC6.0创建一个win32 dll的空工程,并新建一个名字为com_kang_TestJNI.h的头文件添加到该工程中。将TestJNI.java目录下的com_kang_TestJNI.h用记事本打开,拷贝其中的内容粘贴到VC6.0的com_kang_TestJNI.h文件中,并做如下修改:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include //将此处的尖括号改成””,这是由于jni.h不是VC6.0系统自带的头文件,这需要从外部引进
/* Header for class com_kang_TestJNI */

#ifndef _Included_com_kang_TestJNI
#define _Included_com_kang_TestJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_kang_TestJNI
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_kang_TestJNI_sayHello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

4.此时将需要的头文件(分别是jni.h和jni_md.h,位于Java的安装路径%JAVA_HOME%/include/和%JAVA_HOME%/include/win32)添加到VC6.0的工程目录下面。然后在VC6.0中新建一个源文件source.cpp,并添加进入如下代码:

#include "com_kang_TestJNI.h"
#include 
//此处的代码要参考com_kang_TestJNI.h,要和com_kang_TestJNI.h中声明的函数一致。
JNIEXPORT void JNICALL Java_com_kang_TestJNI_sayHello(JNIEnv * env, jobject obj)
{
    printf("Hello World!\n");
}

然后编译。在工程路径中可以查看到有TestJNI.dll生成。这说明已经搞定。
5.配置环境变量:在计算机右键->属性->高级系统设置->环境变量,更改path,在原有的路径前面添加TestJNI.dll的绝对路径用分号与后面的路径分隔。在回到UEStudio中继续编辑TestJNI.java,在主函数中添加如下代码:

System.loadLibrary("TestJNI");//此处的TestJNI是刚刚在VC6.0中得到的动态链接库的名字TestJNI.dll,注意:不能带上.dll,否则系统会找不到这个动态链接库。
        TestJNI tj = new TestJNI();
        tj.sayHello();

6.重新打开一个cmd,切换到TestJNI.java的路径下,输入如下命令:

javac -d . TestJNI.java
java com.kang.TestJNI

会在控制台中输出Hello World!。表明已经完成。

你可能感兴趣的:(Java)