1,JNI是什么?

JNI即Java Native Interface(Java本地接口),是一个协议,主要作用为:实现Java调用c/c++代码(类库),或者C/C++调用Java代码

2,主要实现如下:

2.1, 首先在本地任意的一个目录下创建2各类JNI.java 和Test.java,我在D:\JNITest目录下创建了这两个文件

//JNI.java文件

public class JNI{

//创建一个native接口方法,此方法在C++代码中实现

public native int call();

//静态代码块,加载由C++代码生成的.dll动态链接文件(.dll相当于Java中的jar包吧...)

static{

System.loadLibrary("JNIdll");

}

}

//Test.java文件

public class Test{

public static void main(String[] args){

//创建JNI的对象call

JNI call = new JNI();

//调用call()方法;

int i = call.call();

//输出调用后的结果i

System.out.println("调用Java Native Interface,返回:"+i);

}

}

我的目录如下:

2.2,使用javac 编译JNI.java生成字节码文件JNI.class(需要安装配置java环境变量)并使用javah 编译刚生成的字节码文件得到JNI.h文件,具体操作如下:

在JNI.java源文件目录下打开命令框(cmd),可以cd切换到该目录也可以通过下面的方法直接打开该目录:

javac编译

javah 编译刚才的JNI.calss字节码文件,注意不要后缀名

用Notepad++打开JNI.h文件看看:

2.3 编写C++代码(JNIdll.cpp文件)来实现JNI.java中的call()方法(native修饰的)

//JNIdll.cpp文件

#include

#include

#include "JNI.h"

JNIEXPORT jint JNICALL Java_JNI_call

(JNIEnv *, jobject){

//实现代码

int i = 777;

return i;

}

2.4 使用C++编译器生成.dll动态链接文件

首先需要有C++的编译器,因为我的电脑上装了VS2013,所以有C++的编译器,需要使用 cl 命令,所以先将cl的目录路劲设置到系统的path环境变量中,不然系统不识别此命令(提示cl不是内部或者外部命令),目录路径如下:

需要将java目录下的include目录下的两个文件jni.h和jni_md.h(jni_md.h在include目录下的win32目录中)拷贝到vc的include目录下

2.5 打开命令行,看图不说话...

java 调用c++ jni_Java中使用JNI调用C++相关推荐

  1. android sudio jni 调用so_UE4:UPL 与 JNI 调用的最佳实践

    本篇文章搬运自我自己的博客,原文链接: https://imzlp.me/posts/27289/ 作者: 查利鹏 在使用UE4开发Android时,有时需要获取平台相关的信息.或者执行平台相关的操作 ...

  2. android jni 调用java对象_Android NDK开发之Jni调用Java对象

    本地代码中使用Java对象 通过使用合适的JNI函数,你可以创建Java对象,get.set 静态(static)和 实例(instance)的域,调用静态(static)和实例(instance)函 ...

  3. java jni调用dll文件_Java通过jni调用动态链接库

    (1)JNI简介 JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++).从Java1.1开始,JNI标准成为java ...

  4. java调用可执行程序 开销_java – 进行JNI调用的定量开销是多少?

    快速分析器测试产量: Java类: public class Main { private static native int zero(); private static int testNativ ...

  5. java调用方法_JAVA中方法的调用(详细整理)

    JAVA中方法的调用主要有以下几种: 1.非静态方法 非静态方法就是没有 static 修饰的方法,对于非静态方法的调用,是通过对 象来调用的,表现形式如下. 对象名.方法() eg: public ...

  6. c调用c++ qt_C++中是如何调用C接口的?

    前言 如何在C++代码中调用写好的C接口?你可能会奇怪,C++不是兼容C吗?直接调用不就可以了?这里我们先按下不表,先看看C++如何调用C代码接口. C++如何调用C接口 为什么会有这样的情况呢?想象 ...

  7. php类如何变为静态调用,PHP类中静态方法如何调用非静态方法?_后端开发

    php如何将字符串转成json_后端开发 php将字符串转成json的方法是:可以通过json_encode()函数来实现.json_encode()函数用于对变量进行JSON编码,该函数如果执行成功 ...

  8. c语言 函数调用 传值调用 引用调用 传地址调用,C语言中的传值调用和引用调用...

    在使用一个音频芯片时,需要用到这样一个功能,即对音量进行调节.在厂家提供的驱动里面没有这样的功能函数,因此需要自行添加.注意到厂家提供的驱动里面包含了一个写入命令的函数,void Vol_Cmd(ui ...

  9. Java中使用JNI调用本地动态库的方法

    在Java中,要使用动态库,就要使用到 JNI.首先来看看百度百科对JNI的描述:从Java1.1开始,Java Native Interface(JNI)标准成为Java平台的一部分,它允许Java ...

最新文章

  1. xgboost回归预测模型_偏最小二乘回归分析法 从预测角度对所建立的回归模型进行比较...
  2. Java:Comparable接口
  3. stm32 外部中断学习
  4. Python--day46--MySQL视图
  5. 如何在 ASP.Net Core 中使用 File Providers
  6. python 系统架构_Python之优化系统架构的方案
  7. 携程高管解读Q3财报:海外市场Trip.com流量恢复到去年同期70%
  8. php fpm 日志级别,Php 错误日志级别
  9. [note]标点符号和数学符号所对应的英文
  10. mysql什么是表的并的关系_MySQL表与表的关系
  11. 【兰伯特光照与Blinn_Phong光照】
  12. Mac用户必备翻译软件!Bob 0.5.3 中文版 附谷歌翻译插件!
  13. word生成电子签名
  14. mysql 8 全文检索_MySQL 8中使用全文检索示例
  15. matlab笔记 与excel表格的数据交互—xlsread和xlswrite函数
  16. 四川华巨同诚:拼多多怎么规避店铺降权的问题
  17. 从EXCEL的超链接中批量提取图片
  18. 服务器运维用macos,MacOS和Linux区别_网站服务器运行维护,linux,macos
  19. Java Web实现 使用浏览器从服务器下载文件
  20. 视频剪辑,教你给每个视频画面上添加透明图片

热门文章

  1. mysql shell无法启动服务_[shell脚本] mysql服务启动脚本
  2. android画面传输到电视,如何将手机内容投屏到电视上?
  3. 安卓暗黑模式软件_安卓微信暗黑模式(深色模式)怎么开启?手机什么条件才支持?...
  4. 推荐一门免费提升开发效率的课程,非广告。
  5. Jsp+Ssh+Mysql实现的Java Web学生考勤管理
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的粮店粮食库存管理系统
  7. Flume的Source
  8. iOS MJRefresh下拉刷新(上拉加载)使用详解
  9. shell 除法 小数点
  10. 各种排序总结(三)堆排序