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++接口的更多相关文章

  1. Java调用webservice接口方法

                             java调用webservice接口   webservice的 发布一般都是使用WSDL(web service descriptive langu ...

  2. Java 调用http接口(基于OkHttp的Http工具类方法示例)

    目录 Java 调用http接口(基于OkHttp的Http工具类方法示例) OkHttp3 MAVEN依赖 Http get操作示例 Http Post操作示例 Http 超时控制 工具类示例 Ja ...

  3. (二)通过JAVA调用SAP接口 (增加一二级参数)

    (二)通过JAVA调用SAP接口 (增加一二级参数) 一.建立sap连接 请参考我的上一篇博客 JAVA连接SAP 二.测试项目环境准备 在上一篇操作下已经建好的环境后,在上面的基础上新增类即可 三. ...

  4. Java调用RestFul接口

    使用Java调用RestFul接口,以POST请求为例,以下提供几种方法: 一.通过HttpURLConnection调用 1 public String postRequest(String url ...

  5. Android JNI之JAVA调用C/C++层

    转载请声明:原文转自:http://www.cnblogs.com/xiezie/p/5929996.html 一.java调用本地函数的开发步骤: 1.编写本地方法的类(可以说是用来叙述本地方法的类 ...

  6. Java调用第三方接口工具类(json、form)

    1.JSON值访问 /** * 调用对方接口方法 * @param path 对方或第三方提供的路径 * @param data 向对方或第三方发送的数据,大多数情况下给对方发送JSON数据让对方解析 ...

  7. java 调用webservice接口wsdl,推荐使用wsdl2java,放弃wsimport

    网上说wsimport是jdk1.6后自带的客户端生成调用webservice接口的工具,其实我挺喜欢原生的东西,毕竟自家的东西用着应该最顺手啊,但往往让人惊艳的是那些集成工具. 本机jdk1.8.1 ...

  8. Java调用第三方接口示范

    在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口. 使用流程[1]准备工作:在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的res ...

  9. 三种方法实现java调用Restful接口

    1,基本介绍 Restful接口的调用,前端一般使用ajax调用,后端可以使用的方法比较多, 本次介绍三种: 1.HttpURLConnection实现 2.HttpClient实现 3.Spring ...

随机推荐

  1. Proftpd快速搭建FTP服务器

    前言 在Linux系统中,FTP服务器软件有很多,都已经成熟,像vsftpd, wu-ftp, Pure-FTPd等.但这些软件安装配置起来都比较麻烦,搭建个人的FTP服务器,还是Proftpd比较简 ...

  2. HDU 1253:胜利大逃亡(简单三维BFS)

    pid=1253">胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/ ...

  3. git 忽略文件的三种方式

    1. 在项目目录下新建.gitignore文件并添加规则 特点:此种方式的忽略规则只局限于本项目目录及其子目录,并且.gitignore文件会被提交到远程仓库进行共享忽略规则. 2. 在.git/in ...

  4. 解决怎样监听Activity切换

    本篇博文在我之前的博文中已经提到了,可是监听Activity切换又能够作为一个单独的内容来叙述,因此这里又单独拿了出来进行赘述. Activity的切换无非有两种.第一种:启动或者创建一个新的Acti ...

  5. 使用无缓冲IO函数读写文件

    前言 本文介绍使用无缓冲IO函数进行文件读写. 所谓的无缓冲是指该IO函数通过调用系统调用实现,其实系统调用内部的读写实现也是使用了缓冲技术的. 读写步骤 1. 打开文件 open 函数 2. 读写文 ...

  6. ios上视频与音乐合成后出现播放兼容问题的解决方法

    近期EasyDarwin开源流媒体团队EasyVideoRecorder小组同学Carl在支持一款短视频应用上线时,遇到一个问题:我们在IOS上合成"图片+音乐"成为视频之后,在P ...

  7. uva 10733 The Colored Cubes<polya定理>

    链接:http://uva.onlinejudge.org/external/107/10733.pdf 题意: N 种颜色可以涂成多少种立方体~ 思路: 使正六面体保持不变的运动群总共有: 1.不变 ...

  8. 九度OJ 1141:Financial Management (财务管理) (平均数)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:939 解决:489 题目描述: Larry graduated this year and finally has a job. He's ...

  9. java类的初始化过程

    1 先初始化父类的静态成员和静态块,然后初始化子类的静态成员和静态块,然后再初始化父类,然后再初始化子类. 2 先初始化父类 3 单个类初始化的顺序 先初始化成员变量和代码块,后调用构造函数 4 如果 ...

  10. Mixtures of Gaussians and the EM algorithm

    http://cs229.stanford.edu/ http://cs229.stanford.edu/notes/cs229-notes7b.pdf