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. java数据库连接池简单实现

    package cn.lmj.utils; import java.io.PrintWriter; import java.lang.reflect.InvocationHandler; import ...

  2. Eclipse 视图

    Eclipse 视图 关于视图 Eclipse视图允许用户以图表形式更直观的查看项目的元数据. 例如,项目导航视图中显示的文件夹和文件图形表示在另外一个编辑窗口中相关的项目和属性视图. Eclipse ...

  3. Num 34 : HDOJ : 1205 吃糖果 [ 狄利克雷抽屉原理 ]

           抽屉原理:          桌上有十个苹果,要把这十个苹果放到九个抽屉里,不管如何放,我们会发现至少会有一个抽屉里面至少放两个苹果.          这一现象就是我们所说的" ...

  4. hdparm - get/set SATA/IDE device parameters

    hdparm(8) - Linux man page Name hdparm - get/set SATA/IDE device parameters Synopsis hdparm [ flags ...

  5. Android异步载入AsyncTask具体解释

    曾看见有人说过.认为非常有道理.分享一下:   技术分为术和道两种:   (1)具体做事的方法是术.   (2)做事的原理和原则是道. 近期项目发现个重大问题.结果打log跟踪查是AsyncTask导 ...

  6. MapReduce框架在Yarn上的具体解释

    MapReduce任务解析 在YARN上一个MapReduce任务叫做一个Job. 一个Job的主程序在MapReduce框架上实现的应用名称叫MRAppMaster. MapReduce任务的Tim ...

  7. website link

    error: template with C linkage http://blog.csdn.net/jiong_1988/article/details/7915420http://velep.c ...

  8. jquery+easyui主界面布局一例

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="workbench.aspx ...

  9. iOS8中提示框的使用UIAlertController(UIAlertView和UIActionSheet二合一)

     本文转载至 http://blog.csdn.net/liuwuguigui/article/details/39494597       IOS8UIAlertViewUIActionSheet ...

  10. [Phoenix] 六、MR在Ali-Phoenix上的使用

    摘要: 在云HBASE上利用MR BULKLOAD入库PHOENIX表或通过MR构建PHOENIX索引表. 一.MR在Phoenix上的用途 利用MR对Phoenix表(可带有二级索引表)进行Bulk ...