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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haohengyuan/article/details/31539587

点击打开链接

(提取码: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.运行结果








猜你喜欢

转载自blog.csdn.net/haohengyuan/article/details/31539587