点击打开链接

(提取码:8676)

一、首先简单交代一下两个问题:

1.什么是JNI                - - -     JNI的全名为Java Native Interface(Java本地接口)

2.JNI用来干什么         - - -     java代码利用JNI可以调用其他语言编写的代码

二、我们以下面的小例子来演示怎么利用JNI来调用c++代码:

c++代码:输出一句“Hello World”

java代码调用C++代码将" Hello World " 输出到控制台。

三、操作步骤如下

1.在java类中声明Native函数

package com.wade;public class TestJni {//在java类中声明Native函数public native void sayHello();public static void main(String[] args) {}}

2.利用javah命令编译生成有关Native方法的头文件

2.1  跳转到工程文件的bin目录下

2.2  利用javah命令编译生成头文件

2.3 操作结果如右图

3.利用VS创建一个C++的动态链接库工程,生成dll文件

3.1创建动态链接库工程

3.2 将编译生成的有关Native方法的头文件放到C++动态连接库工程下

3.3 将头文件导入C++工程的头文件夹

3.3.1 打开头文件存在错误(如下图)发现头文件里还包含其他头文件"jni.h"

- -位于目录Java\jdk1.6.0_10\include

解决办法:将位于目录Java\jdk1.6.0_10\include 的jni.h文件添加到C++工程的头文件夹。(添加过程不再描述)

注意:同时要将上图中出错的#include<jni.h>改为#include"jni.h",因为jni.h在jdk中是系统自带的,而现   在我们将其添加到c++工程则相当于我们自己写了一头文件放到C++工程里,自己定义的用“”。

3.3.2 添加完jni.h文件后发现还是有错,应为jni.h头文件里含包含头文件jni_md.h

- -位于目录Java\jdk1.6.0_10\include\win32

解决办法:将位于目录Java\jdk1.6.0_10\include\win32的jni_md.h文件添加到C++工程的头文件夹。(添加过程不再描述)

3.4创建.cpp文件并在源文件里实现Native方法的代码编写

#include"com_wade_TestJni.h"
#include <iostream>
using namespace std;JNIEXPORT void JNICALL Java_com_wade_TestJni_sayHello(JNIEnv *env, jobject obj)
{cout<<"Hello world"<<endl;
}

调试生成dll文件

4.将dll文件的路径添加到系统环境变量path下,这样在任意目录下都可以找到dll文件

5.在java类中加载dll文件

6.调用dll文件的代码

package com.wade;public class TestJni {//在java类中声明Native函数public native void sayHello();public static void main(String[] args) {//在java类中加载dll文件System.loadLibrary("Cjjdll");//创建对象,并调用方法new TestJni().sayHello();}}

7.运行出现以下问题

解决方法:

Cjjdll动态链接库实在eclipse启动之后导入的,重启eclipse之后会识别到Cjjdll文件。

8.运行结果

Java利用JNI调用c++代码简易例子演示相关推荐

  1. Java如何利用JNI调用C++(简略介绍及步骤)

    Java如何利用JNI调用C++(简略介绍及步骤) 文章目录 Java如何利用JNI调用C++(简略介绍及步骤) 一.原理介绍 二.详细步骤 步骤一:编写Java类 步骤二:生成.h文件 步骤三:CL ...

  2. 【开发者笔记】java 利用jna调用c#的dll

    一.需求阐述: 如果我们的项目利用c#开发,到了开发后期需要和java组进行合作,其中有一部分业务逻辑利用c#已经code completed,那么我们可能会考虑用java来调用现成的c#dll实现需 ...

  3. Java利用JNA调用C#的dll

    https://www.cnblogs.com/wyongbo/p/jnaTest.html 本文参考以上链接,结合自己实际遇到的问题,做过一些修改(红色字体标注),主要是为了给自己做个笔记. 一.需 ...

  4. [安卓开发笔记二]android Studio通过jni调用C++代码

    [安卓开发笔记二]android Studio通过jni调用C++代码 16/12/11 更新 此博客基于安卓android studio 1.5所写,现在已经有了android studio2.2的 ...

  5. Java通过JNI调用C++动态链接库dll,并打在jar包内 ——JNA-JNI(一)

    Java通过JNI调用C++动态链接库dll,并打在jar包内--JNA-JNI(一) 系列文章: Java通过JNI调用C++动态链接库dll,并打在jar包内 --JNA-JNI(一) Java使 ...

  6. JAVA通过JNI调用C++动态链接库CLL(一)

    简介 使用eclipse新建JAVA项目并生成.h头文件 新建项目JniDemo 新建测试类JniTest并声明一个native的方法 使用Javah命令生成native方法的声明的C/C++头文件 ...

  7. Java通过-jni调用c语言

    Java通过-jni调用c语言 一.编写JAVA程序 二.编译h头文件 三.编写C方法实现 四.生成对象文件 五.生成动态链接库 六.执行 一.编写JAVA程序 public class TestNa ...

  8. java 怎么调用js代码_在Java中直接调用js代码

    JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Java中直接调用js代码 不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: " ...

  9. JAVA通过JNI调用C++动态链接库CLL(二)

    简介 使用Visual Studio 2017新建c++动态链接库dll项目 编写JniDemo.h中getName实现并生成DLL 编写JniDemo.h在JniDemo.c实现getName方法 ...

最新文章

  1. R语言abs函数计算数值数据对象的绝对值实战
  2. java自动化开发_Java自动化开发指南
  3. eclipse如何部署到tomcat上的
  4. linux c用open打开(创建)一个文件
  5. 动态生成表格、隐藏表格、选中删除任意行、jquery、输入验证
  6. pcb外观维修_「维修案例」泰克AFG3021函数任意波形发生器故障维修
  7. 图像处理-直方图均衡化
  8. python加法赋值运算符为_Python 运算符
  9. 详细分析微软“照片”应用图像编码器漏洞 (CVE-2020-17113)
  10. 对‘pthread_create’未定义的引用_全球两大引文数据库,都在悄悄少算引用次数...
  11. Win10 系统 WebLogic 12cR2 下载与安装图解
  12. 区分音视频文件的容器格式和编码格式
  13. python股票接口_python获取股票数据接口
  14. springboot接收excel数据文件去重
  15. 探究网络信息安全问题及防范措施
  16. 失去了翅膀,却依然坚信只要拼搏就可以飞翔
  17. 北京大学计算机科学技术研究所研究员万小军:机器写稿技术与应用 | CCF-GAIR 2017...
  18. Proteus:logic contentions detected on net B15
  19. 《黃帝內經》第一章《上古天真論》
  20. RR正显著-不显著 -负显著

热门文章

  1. java 自定义注解_两步实现Java自定义注解
  2. Python知识点3——列表操作
  3. 书籍:Python机器学习蓝图第2版 Python Machine Learning Blueprints 2nd - 2019.pdf
  4. 一个 MVC 框架以 MVVM 之「魂」复活了!
  5. 百度地图-解决新版百度定位失败问题
  6. ios-http协议
  7. 面性对象中栈内存和堆内存的理解
  8. Nagios监控部署(四)--被监控主机配置
  9. [收藏]比较著名的.net技术论坛网址(含国外的)
  10. ISA SERVER 2004 对多重网络支持功能简述