`
y13872888163
  • 浏览: 16867 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JNI学习系列——java中调用C/C++

 
阅读更多
java中调用C/C++

对JNI的初步认识请看上篇JNI学习系列——初步认识JNI,本编将介绍怎样编写一个简单的JAVA程序来调用C\C++;

1. 编写带有native声明的方法的java类 TestNative.java

2.进入 TestNative.java 所在的过程目录 运行 javac TestNative.java 编译生成.class文件,运行javah TestNative 会生成一个 com_yin_jni_TestNative.h 的头文件,
该文件名是由 包名 + jni + 类名 组成 ;
com_yin_jni_TestNative.h
Java_com_yin_jni_TestNative_sayHello (JNIEnv *, jobject) 即为编译后为JAVA中sayHello生成的c++方法,由 java + 包名 + jni + 类名 + 方法名 组成;
3.新建一个C++工程 我用的是vc++ 6.0 新建——>工程——>Win32 Dynamic link libnary ——>空的.dll 工程;工程名为 NativeCode
将com_yin_jni_TestNative.h 导入工程的Head Files 中 ,在 Source Files中新建 source.cpp文件 ,将JNIEXPORT void JNICALL Java_com_yin_jni_TestNative_sayHello (JNIEnv *, jobject) 这句代码复制到 source.cpp; 同时为 (JNIEnv *, jobject) 添加参数 修改为 (JNIEnv * env, jobject obj).

4.编译刚刚的c++工程,这时会报错 can‘t find “jni.h” 找不到jni.h 这个头文件 ,这时需要将 jni.h 文件复制到 工程的目录下 ,jni.h在JAVA的JDK的include的目录下,
同时将win32中的jni_md.h一起复制,因为jni.h 会调用此文件;
此处还需注意 引入 jni.h 时 用 # include<jni.h>可能会报错,改成 “jni.h”就可以了;因为 用# include<jni.h> 编译器会在系统的环境变量下的include中找,这样就找不到
该头文件了;

5.编译成功后 会在C++工程目录下生成一个NativeCode.dll文件 这样就可以在 JAVA代码中调用该.dll文件了;
注意 :在调用之前 必须将该.dll文件所在的目录添加到环境变量中,不然运行程序时会找不到该.dll文件,同时要重启Eclipse 因为在Eclipse 启动是已经加载了当前系统的环境变量了,修改环境变量后 Eclipse 找不到新加的环境变量.

6.在JAVA中调用生成的 .dll文件

运行该JAVA程序,控制台会打印 Hello,My first jni program ,这就代表你成功了.
分享到:
评论

相关推荐

    JNI技术手册 c/c++调用java

    II. java c/cpp互相调用实例(姊妹篇之一)——java调用c/cpp 4 一 先制作一个系统中有的DLL文件(cpp给出的sdk接口) 4 二 JNI 7 1、 编写java文件 7 2、 生成.h头文件 8 3、 用c/cpp实现这个头文件 9 三 测试 10 ...

    JNI学习示例代码,含java代码工程和win32 dll工程

    JNI,全称为Java Native Interface,即Java本地接口,JNI是Java调用Native 语言的一种特性。通过JNI可以使得Java与C/C++机型交互。即可以在Java代码中调用C/C++等语言的代码或者在C/C++代码中调用Java代码。由于JNI...

    Java通过调用C/C++实现的DLL动态库——JNI的方法

    主要介绍了Java通过调用C/C++实现的DLL动态库——JNI的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    JNI编程(二) —— 让C++和Java相互调用(2)

    JNI的API参考手册 博文链接:https://chnic.iteye.com/blog/236248

    详解AndroidStudio JNI +Gradle3.0以上JNI爬坑之旅

    JNI——(Java Native Interface),他是java平台的特性,不是安卓系统提供的。他定义了一些JNI函数,来让开发者可以通过调用这些函数来实现java代码调用C/C++代码。 2.如何使用JNI呢? 我们先将写好的C/C++代码...

    JNI文档资料源码_2020_02_04.zip

    【Android NDK 开发】JNI 方法解析 ( C/C++ 调用 Java 方法 | 函数签名 | 调用对象方法 | 调用静态方法 ) I . 调用 Java 方法流程 II . 获取 jclass 对象 ( GetObjectClass ) III . 获取 jclass 对象 ( Find...

    JNI文档资料源码_2020_01_22

    Java 中加载调用动态库 IX . 使用 javah 工具生成 C++ 中需要实现的 Native 方法 ( 仅做参考 ) X . 总结 ———————————————— 版权声明:本文为CSDN博主「韩曙亮」的原创文章,遵循 CC 4.0 BY-NC-...

    JAWIN(Java调用Win API)

    Java调用Win API:SUN官方提供的JNI调用时还要自己生成头文件,对已有的DLL再次进行封装。需要对C++非常熟悉,因为要写C++代码。不过还好还有另一种解决方案——Jawin

    java加壳的问题

    以前我认为这是不可能的,因为动态加载代码这样的内存级别的操作,java无法做到,除非使用JNI(Java Native Interface),调用自己编写的C代码,在C代码中实现动态加载java代码。但是,C如何加载java代码呢?这需要对...

    JAVA上百实例源码以及开源项目源代码

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    h_JAVA 2应用编程150例.rar

    实例139 控制Java与C++程序的通信 510 实例140 访问Windows注册表 514 第13章 Java配置与集成 523 实例141 J2SDK的安装配置 524 实例142 使用第三方包 525 实例143 安装配置Tomcat 526 实例144 安装配置Apache 528 ...

    java应用软件程序设计

    490 第12章 JNI编程 493 实例131 简单的JNI调用 494 实例132 调用Windows API 495 实例133 通过JNI运行OpenGL动画 496 实例134 JNI与COM之间的调用 500 实例135 隐藏Java控制台 502 实例136 ...

    深入理解Android:卷I--详细书签版

    此外,他对Linux内核、C/C++/Python相关的技术 ,以及高性能网络服务器和多核并行开发等也有一定的研究。 目录 封面 -17 封底 489 扉页 -16 版权 -15 推荐序 -14 前言 -12 致谢 -9 目录 -7 第1章 阅读前的准备...

    新版Android开发教程.rar

    � Google 提供了一套 Java 核心包 (J2SE 5,J2SE 6) 的有限子集,尚不承诺遵守 Java 任何 Java 规范 , 可能会造 成J ava 阵营的进一步分裂。 � 现有应用完善度不太够,需要的开发工作量较大。--------------------...

Global site tag (gtag.js) - Google Analytics