您的位置:首页 > 编程语言 > C语言/C++

Java利用JNI调用c++代码简易例子演示

2014-06-17 00:31 676 查看
点击打开链接

(提取码:8676)

一、首先简单交代一下两个问题:

1.什么是JNI - - - JNI的全名为Java Native Interface(Java本地接口)

2.JNI用来干什么 - - - java代码利用JNI可以调用其他语言编写的代码

二、我们以下面的小例子来演示怎么利用JNI来调用c++代码:

c++代码:输出一句“Hello World”

java代码调用C++代码将" Hello World " 输出到控制台。

三、操作步骤如下

1.在java类中声明Native函数

package com.wade;

public class TestJni {

//在java类中声明Native函数
public native void sayHello();

public static void main(String[] args) {

}

}


2.利用javah命令编译生成有关Native方法的头文件

2.1 跳转到工程文件的bin目录下

2.2 利用javah命令编译生成头文件



2.3 操作结果如右图


3.利用VS创建一个C++的动态链接库工程,生成dll文件

3.1创建动态链接库工程





3.2 将编译生成的有关Native方法的头文件放到C++动态连接库工程下



3.3 将头文件导入C++工程的头文件夹



3.3.1 打开头文件存在错误(如下图)发现头文件里还包含其他头文件"jni.h"

- -位于目录Java\jdk1.6.0_10\include



解决办法:将位于目录Java\jdk1.6.0_10\include 的jni.h文件添加到C++工程的头文件夹。(添加过程不再描述)

注意:同时要将上图中出错的#include<jni.h>改为#include"jni.h",因为jni.h在jdk中是系统自带的,而现 在我们将其添加到c++工程则相当于我们自己写了一头文件放到C++工程里,自己定义的用“”。

3.3.2 添加完jni.h文件后发现还是有错,应为jni.h头文件里含包含头文件jni_md.h

- -位于目录Java\jdk1.6.0_10\include\win32

解决办法:将位于目录Java\jdk1.6.0_10\include\win32的jni_md.h文件添加到C++工程的头文件夹。(添加过程不再描述)

3.4创建.cpp文件并在源文件里实现Native方法的代码编写

#include"com_wade_TestJni.h"
#include <iostream>
using namespace std;

JNIEXPORT void JNICALL Java_com_wade_TestJni_sayHello(JNIEnv *env, jobject obj)
{
cout<<"Hello world"<<endl;
}


调试生成dll文件


4.将dll文件的路径添加到系统环境变量path下,这样在任意目录下都可以找到dll文件

5.在java类中加载dll文件

6.调用dll文件的代码

package com.wade;

public class TestJni {

//在java类中声明Native函数
public native void sayHello();

public static void main(String[] args) {

//在java类中加载dll文件
System.loadLibrary("Cjjdll");
//创建对象,并调用方法
new TestJni().sayHello();
}

}


7.运行出现以下问题



解决方法:

Cjjdll动态链接库实在eclipse启动之后导入的,重启eclipse之后会识别到Cjjdll文件。

8.运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: