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. 基于cucumber接口测试框架的扩展——测试框架总结之cucumber

    主要功能: 1.通过fiddler抓取请求,导出xml文件. 2.解析xml文件至excel,或者手工填写excel数据. 3.根据excel中的URL中地址生成的接口集合和feature内容模板生成 ...

  2. Android Design Support Library概览

    尊重劳动成果.转载请注明出处:http://blog.csdn.net/growth58/article/details/47972467 关注新浪微博:@于卫国 邮箱:yuweiguocn@gmai ...

  3. vue-router钩子beforeRouteEnter函数获取到this实例

    官方文档: const Foo = { template: `...`, beforeRouteEnter (to, from, next) { // 在渲染该组件的对应路由被 confirm 前调用 ...

  4. C++继承:公有,私有,保护(转)

    公有继承(public).私有继承(private).保护继承(protected)是常用的三种继承方式. 1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时, ...

  5. C++11 并发指南三(std::mutex 详解)(转)

    转自:http://www.cnblogs.com/haippy/p/3237213.html 上一篇<C++11 并发指南二(std::thread 详解)>中主要讲到了 std::th ...

  6. 定义自己的代码风格CheckStyle简单使用

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE module PUBLIC "-/ ...

  7. TensorFlow从入门到实战资料汇总 2017-02-02 06:08 | 数据派

    TensorFlow从入门到实战资料汇总 2017-02-02 06:08 | 数据派 来源:DataCastle数据城堡 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学 ...

  8. g++ 6.4编译opencv-2.4.10报错记录

      fetch公司的项目进行编译,此项目依赖opencv库.由于本人一直比较偏爱fedora,但也因此给我带来了许多"乐趣"(麻烦).fedora一直走得比较前沿,g++ 6.3了 ...

  9. funhub 独立游戏团队诚邀策划,美术,技术,QA 大大加入(可远程办公)

    我们刚成立的的独立游戏团队,base:广州,团队陆陆续续已经有 6 个成员了,现在还缺的岗位有策划,美术.不过有其 他岗位的仁人志士也可加入. 另外,我们支持远程办公,这是互联网行业的天然优势,一定要 ...

  10. SpringInAction4笔记——复习

    由于目前只做后端的业务代码的开发,所以根据自己掌握的熟悉程度,只需要复习几个模块即可 重点看的是核心容器(IOC),redis,缓存,消息(主要是rabbitmq),事务,springboot,单元测 ...