java jni调用_JNI之JAVA调用C++接口

本文详细介绍了如何使用Java Native Interface (JNI) 调用C++接口的步骤,包括创建Java包和类、定义native方法、生成头文件、创建C++工程、编写C++代码、加载和调用C++接口。最后通过运行Java程序验证了C++接口的正确调用。
摘要由CSDN通过智能技术生成

1、JNI定义(来自百度百科)

JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。

2、java通过JNI调用c++接口步骤

1)、创建java包、类

此处创建 包myJNI,类TestJNI

packagemyJNI;public classTestJNI {

}

2)、在TestJNI类中创建native方法

此处创建sayHello()方法

packagemyJNI;public classTestJNI {public native voidsayHello();}

3)、通过javah命令生成C++需要用到的头文件

下面是我的java工程的目录结构:

|—eclipse_workspace

|—TestJNI

|—src

|—myJNI

|—TestJNI.java

——用命令行进入java工程所在的目录,进入到与src同级的目录即可

96d479c838fc5d21e7cb2f1d80fee895.png

——用javah命令生成.h文件,因为TestJNI.java在包myJNI中,此时是在src目录下执行命令,所以加上加上包myJNI

18158056fba3be84b303047b3c3f9ac2.png

——javah命令执行成功后,在执行命令的目录下(此处为src目录)生成.h文件

835abcb068f6367166475c59e4bc1c41.png

/*DO NOT EDIT THIS FILE - it is machine generated*/#include

/*Header for class myJNI_TestJNI*/#ifndef _Included_myJNI_TestJNI#define _Included_myJNI_TestJNI#ifdef __cplusplusextern "C"{#endif

/** Class: myJNI_TestJNI

* Method: sayHello

* Signature: ()V*/JNIEXPORTvoidJNICALL Java_myJNI_TestJNI_sayHello

(JNIEnv*, jobject);

#ifdef __cplusplus

}#endif

#endif

4)、创建C++工程

——新建工程

e1cb2746a4251f7d8084565431568874.png

——应用程序类型设置为DLL类型

46c1b4bb33da01587da55d0967239121.png

——将前面生成的.h文件拷贝到C++工程,放到与.cpp同目录下

d4fa7eecaefde04c0897edb4795162f7.png

——将JDK安装目录include目录下的jni.h 和 include/win32目录下jawt_md.h和jni_md.h拷贝到VS安装目录下的VC/include目录下

30809400568028afe478a462431f0e70.png   

34e62cd7c1ea56323fbcfeae20ecd06f.png

——将C++工程中生成的dll文件拷贝到到环境变量path所包含的目录下,可以在环境变量中查看path所包含的目录

我的是将TestJNI.dll拷贝至D:\Program Files\Java\jdk1.7.0_17\bin中

——在C++工程中编写sayHello()方法

方法名必须与TestJNI.h中的方法名一致,否则出错

#include#include"myJNI_TestJNI.h"JNIEXPORTvoid JNICALL Java_myJNI_TestJNI_sayHello(JNIEnv *env, jobject obj)

{using namespacestd;

cout<

}

5)、编写java程序,在java中调用C++的sayHello()接口

——System.loadLibrary("TestJNI")是加载dll文件,该文件名称必须为C++工程生成的dll文件名称;

——testJNI.sayHello()及调用C++实现的接口;

packagemyJNI;public classTestJNI {public native voidsayHello();public static voidmain(String[] args) {

System.loadLibrary("TestJNI");

TestJNI testJNI= newTestJNI();

testJNI.sayHello();

}

}

6)、运行java程序,打印结果为 hello world!  表明通过JNI调用C++接口成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值