java 调用c++ jni_Java中使用JNI调用C++
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++相关推荐
- android sudio jni 调用so_UE4:UPL 与 JNI 调用的最佳实践
本篇文章搬运自我自己的博客,原文链接: https://imzlp.me/posts/27289/ 作者: 查利鹏 在使用UE4开发Android时,有时需要获取平台相关的信息.或者执行平台相关的操作 ...
- android jni 调用java对象_Android NDK开发之Jni调用Java对象
本地代码中使用Java对象 通过使用合适的JNI函数,你可以创建Java对象,get.set 静态(static)和 实例(instance)的域,调用静态(static)和实例(instance)函 ...
- java jni调用dll文件_Java通过jni调用动态链接库
(1)JNI简介 JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++).从Java1.1开始,JNI标准成为java ...
- java调用可执行程序 开销_java – 进行JNI调用的定量开销是多少?
快速分析器测试产量: Java类: public class Main { private static native int zero(); private static int testNativ ...
- java调用方法_JAVA中方法的调用(详细整理)
JAVA中方法的调用主要有以下几种: 1.非静态方法 非静态方法就是没有 static 修饰的方法,对于非静态方法的调用,是通过对 象来调用的,表现形式如下. 对象名.方法() eg: public ...
- c调用c++ qt_C++中是如何调用C接口的?
前言 如何在C++代码中调用写好的C接口?你可能会奇怪,C++不是兼容C吗?直接调用不就可以了?这里我们先按下不表,先看看C++如何调用C代码接口. C++如何调用C接口 为什么会有这样的情况呢?想象 ...
- php类如何变为静态调用,PHP类中静态方法如何调用非静态方法?_后端开发
php如何将字符串转成json_后端开发 php将字符串转成json的方法是:可以通过json_encode()函数来实现.json_encode()函数用于对变量进行JSON编码,该函数如果执行成功 ...
- c语言 函数调用 传值调用 引用调用 传地址调用,C语言中的传值调用和引用调用...
在使用一个音频芯片时,需要用到这样一个功能,即对音量进行调节.在厂家提供的驱动里面没有这样的功能函数,因此需要自行添加.注意到厂家提供的驱动里面包含了一个写入命令的函数,void Vol_Cmd(ui ...
- Java中使用JNI调用本地动态库的方法
在Java中,要使用动态库,就要使用到 JNI.首先来看看百度百科对JNI的描述:从Java1.1开始,Java Native Interface(JNI)标准成为Java平台的一部分,它允许Java ...
最新文章
- xgboost回归预测模型_偏最小二乘回归分析法 从预测角度对所建立的回归模型进行比较...
- Java:Comparable接口
- stm32 外部中断学习
- Python--day46--MySQL视图
- 如何在 ASP.Net Core 中使用 File Providers
- python 系统架构_Python之优化系统架构的方案
- 携程高管解读Q3财报:海外市场Trip.com流量恢复到去年同期70%
- php fpm 日志级别,Php 错误日志级别
- [note]标点符号和数学符号所对应的英文
- mysql什么是表的并的关系_MySQL表与表的关系
- 【兰伯特光照与Blinn_Phong光照】
- Mac用户必备翻译软件!Bob 0.5.3 中文版 附谷歌翻译插件!
- word生成电子签名
- mysql 8 全文检索_MySQL 8中使用全文检索示例
- matlab笔记 与excel表格的数据交互—xlsread和xlswrite函数
- 四川华巨同诚:拼多多怎么规避店铺降权的问题
- 从EXCEL的超链接中批量提取图片
- 服务器运维用macos,MacOS和Linux区别_网站服务器运行维护,linux,macos
- Java Web实现 使用浏览器从服务器下载文件
- 视频剪辑,教你给每个视频画面上添加透明图片
热门文章
- mysql shell无法启动服务_[shell脚本] mysql服务启动脚本
- android画面传输到电视,如何将手机内容投屏到电视上?
- 安卓暗黑模式软件_安卓微信暗黑模式(深色模式)怎么开启?手机什么条件才支持?...
- 推荐一门免费提升开发效率的课程,非广告。
- Jsp+Ssh+Mysql实现的Java Web学生考勤管理
- 基于JAVA+SpringMVC+Mybatis+MYSQL的粮店粮食库存管理系统
- Flume的Source
- iOS MJRefresh下拉刷新(上拉加载)使用详解
- shell 除法 小数点
- 各种排序总结(三)堆排序