JNI之JAVA调用C++接口
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
package myJNI;
public class TestJNI {
}
2)、在TestJNI类中创建native方法
此处创建sayHello()方法
package myJNI;
public class TestJNI {
public native void sayHello();
}
3)、通过javah命令生成C++需要用到的头文件
下面是我的java工程的目录结构:
|—eclipse_workspace
|—TestJNI
|—src
|—myJNI
|—TestJNI.java
——用命令行进入java工程所在的目录,进入到与src同级的目录即可

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

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

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class myJNI_TestJNI */ #ifndef _Included_myJNI_TestJNI
#define _Included_myJNI_TestJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: myJNI_TestJNI
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_myJNI_TestJNI_sayHello
(JNIEnv *, jobject); #ifdef __cplusplus
}
#endif
#endif
4)、创建C++工程
——新建工程

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

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

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

——将C++工程中生成的dll文件拷贝到到环境变量path所包含的目录下,可以在环境变量中查看path所包含的目录
我的是将TestJNI.dll拷贝至D:\Program Files\Java\jdk1.7.0_17\bin中
——在C++工程中编写sayHello()方法
方法名必须与TestJNI.h中的方法名一致,否则出错
#include<iostream>
#include"myJNI_TestJNI.h" JNIEXPORT void JNICALL Java_myJNI_TestJNI_sayHello(JNIEnv *env, jobject obj)
{
using namespace std;
cout<<"hello world!"<<endl;
}
5)、编写java程序,在java中调用C++的sayHello()接口
——System.loadLibrary("TestJNI")是加载dll文件,该文件名称必须为C++工程生成的dll文件名称;
——testJNI.sayHello()及调用C++实现的接口;
package myJNI;
public class TestJNI {
public native void sayHello();
public static void main(String[] args) {
System.loadLibrary("TestJNI");
TestJNI testJNI = new TestJNI();
testJNI.sayHello();
}
}
6)、运行java程序,打印结果为 hello world! 表明通过JNI调用C++接口成功。
JNI之JAVA调用C++接口的更多相关文章
- Java调用webservice接口方法
java调用webservice接口 webservice的 发布一般都是使用WSDL(web service descriptive langu ...
- Java 调用http接口(基于OkHttp的Http工具类方法示例)
目录 Java 调用http接口(基于OkHttp的Http工具类方法示例) OkHttp3 MAVEN依赖 Http get操作示例 Http Post操作示例 Http 超时控制 工具类示例 Ja ...
- (二)通过JAVA调用SAP接口 (增加一二级参数)
(二)通过JAVA调用SAP接口 (增加一二级参数) 一.建立sap连接 请参考我的上一篇博客 JAVA连接SAP 二.测试项目环境准备 在上一篇操作下已经建好的环境后,在上面的基础上新增类即可 三. ...
- Java调用RestFul接口
使用Java调用RestFul接口,以POST请求为例,以下提供几种方法: 一.通过HttpURLConnection调用 1 public String postRequest(String url ...
- Android JNI之JAVA调用C/C++层
转载请声明:原文转自:http://www.cnblogs.com/xiezie/p/5929996.html 一.java调用本地函数的开发步骤: 1.编写本地方法的类(可以说是用来叙述本地方法的类 ...
- Java调用第三方接口工具类(json、form)
1.JSON值访问 /** * 调用对方接口方法 * @param path 对方或第三方提供的路径 * @param data 向对方或第三方发送的数据,大多数情况下给对方发送JSON数据让对方解析 ...
- java 调用webservice接口wsdl,推荐使用wsdl2java,放弃wsimport
网上说wsimport是jdk1.6后自带的客户端生成调用webservice接口的工具,其实我挺喜欢原生的东西,毕竟自家的东西用着应该最顺手啊,但往往让人惊艳的是那些集成工具. 本机jdk1.8.1 ...
- Java调用第三方接口示范
在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口. 使用流程[1]准备工作:在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的res ...
- 三种方法实现java调用Restful接口
1,基本介绍 Restful接口的调用,前端一般使用ajax调用,后端可以使用的方法比较多, 本次介绍三种: 1.HttpURLConnection实现 2.HttpClient实现 3.Spring ...
随机推荐
- Proftpd快速搭建FTP服务器
前言 在Linux系统中,FTP服务器软件有很多,都已经成熟,像vsftpd, wu-ftp, Pure-FTPd等.但这些软件安装配置起来都比较麻烦,搭建个人的FTP服务器,还是Proftpd比较简 ...
- HDU 1253:胜利大逃亡(简单三维BFS)
pid=1253">胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- git 忽略文件的三种方式
1. 在项目目录下新建.gitignore文件并添加规则 特点:此种方式的忽略规则只局限于本项目目录及其子目录,并且.gitignore文件会被提交到远程仓库进行共享忽略规则. 2. 在.git/in ...
- 解决怎样监听Activity切换
本篇博文在我之前的博文中已经提到了,可是监听Activity切换又能够作为一个单独的内容来叙述,因此这里又单独拿了出来进行赘述. Activity的切换无非有两种.第一种:启动或者创建一个新的Acti ...
- 使用无缓冲IO函数读写文件
前言 本文介绍使用无缓冲IO函数进行文件读写. 所谓的无缓冲是指该IO函数通过调用系统调用实现,其实系统调用内部的读写实现也是使用了缓冲技术的. 读写步骤 1. 打开文件 open 函数 2. 读写文 ...
- ios上视频与音乐合成后出现播放兼容问题的解决方法
近期EasyDarwin开源流媒体团队EasyVideoRecorder小组同学Carl在支持一款短视频应用上线时,遇到一个问题:我们在IOS上合成"图片+音乐"成为视频之后,在P ...
- uva 10733 The Colored Cubes<polya定理>
链接:http://uva.onlinejudge.org/external/107/10733.pdf 题意: N 种颜色可以涂成多少种立方体~ 思路: 使正六面体保持不变的运动群总共有: 1.不变 ...
- 九度OJ 1141:Financial Management (财务管理) (平均数)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:939 解决:489 题目描述: Larry graduated this year and finally has a job. He's ...
- java类的初始化过程
1 先初始化父类的静态成员和静态块,然后初始化子类的静态成员和静态块,然后再初始化父类,然后再初始化子类. 2 先初始化父类 3 单个类初始化的顺序 先初始化成员变量和代码块,后调用构造函数 4 如果 ...
- Mixtures of Gaussians and the EM algorithm
http://cs229.stanford.edu/ http://cs229.stanford.edu/notes/cs229-notes7b.pdf