`
y13872888163
  • 浏览: 17724 次
  • 性别: 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 ,这就代表你成功了.
分享到:
评论

相关推荐

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

    在本示例中,Java程序通过JNI调用了C/C++实现的DLL(动态链接库)来执行特定的数学运算。以下是通过JNI调用DLL动态库的具体步骤和知识点: 1. **创建Java类**: 首先,我们需要在Java中创建一个类,声明native...

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

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

    Android 学习笔记——利用JNI技术在Android中调用、调试C++代码

    这篇“Android学习笔记——利用JNI技术在Android中调用、调试C++代码”将带你深入理解如何在Android应用中使用JNI来调用C++代码,以及如何进行调试。以下是对这一主题的详细阐述。 1. **JNI简介** JNI是Java平台的...

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

    至于“Foreground”这个文件名,可能是博客作者提供的一个示例项目,其中可能包含了一个运行在前台的Java应用,演示了如何通过JNI调用C++代码。具体实现可能涉及Android的Service或Activity,这部分内容需要查看源码...

    java调用C语言编写的so库中的函数,java调用C语言编写的dll库中的函数

    总的来说,Java调用C语言编写的本地库需要理解JNI和JNA的工作原理,以及它们如何处理数据类型转换、参数传递和本地库的加载。通过这些技术,开发者可以充分利用C/C++的性能优势,同时享受Java的平台独立性和高级抽象...

    安卓Android源码——代码调用C++代码和C++代码调用代码.zip

    总结,本资料包通过示例详细展示了Android应用如何通过JNI调用C++代码以及C++代码如何反向调用Java,这为开发者提供了更灵活的编程选项,特别是在需要高性能计算或复用C/C++库的情况下。通过理解和掌握这些知识,...

    Java JNI调用IC卡读卡器

    JNI在很多情况下被用来调用本地库,比如C、C++编写的库,这在处理特定硬件设备或者高性能计算时非常有用。在这个场景中,我们需要通过JNI来调用IC卡读卡器的DLL(动态链接库),该DLL可能是由非Java语言编写的,以...

    安卓Android源码——java调用C例子.zip

    本资料“安卓Android源码——java调用C例子.zip”聚焦于如何在Android应用中通过Java调用C语言编写的原生代码,这一过程通常称为JNI(Java Native Interface)。 JNI是Java平台标准的一部分,它允许Java代码和其他...

    jni例子——使用int数组

    在这个“jni例子——使用int数组”的示例中,我们将深入探讨如何在Java和C/C++之间传递和操作int数组。 1. **JNI基础知识**: - JNI接口提供了Java与本地代码(如C/C++)通信的桥梁,使得开发者可以在Java应用中...

    JNI开发实例——锅炉压力监控器的源码

    1. **头文件定义**:在JNI开发中,我们需要创建一个`.h`头文件,其中声明了将被Java代码调用的C/C++函数。这些函数通常带有`JNIEXPORT`和`JNICALL`宏,以确保正确的导出和调用约定。 2. **本地方法实现**:接着,...

    Java中JNI的使用(一)——native

    Java中的JNI(Java Native Interface)是一种技术,允许Java代码与其他编程语言编写的代码进行交互,尤其是C和C++。JNI在许多场景下是必要的,比如访问操作系统特定的功能、提升性能或者利用已有的C/C++库。这篇博客...

    JNI调用及回调就(Java&C) 源码

    JNI提供了一套接口,使得Java代码可以生成本地方法调用,这些方法可以是用C或C++编写的。在Java中,我们定义一个带有`native`关键字的方法,这个方法的实现是在本地代码中完成的。然后,使用`javah`工具生成对应的C/...

    JNI攻略之十一――启动虚拟机调用java类

    标题与描述均指向了一个具体的技术主题——通过JNI(Java Native Interface)在C语言环境中启动Java虚拟机并调用Java类。这一技术应用广泛,尤其是在需要跨语言编程或利用Java的特性(如垃圾回收、多线程)而底层...

    安卓Android源码——调用C++代码和C++代码调用源码.zip

    1. **JNI(Java Native Interface)**:是Android系统中调用C++代码的基础。JNI是一种接口,允许Java代码与其他语言(如C++)进行交互。开发者需要创建一个Java类,该类包含声明为`native`的方法,并通过`System....

    Jnidemo-master.3.17.final.ok.rar

    首先,Jnidemo-master项目是一个关于JNI的实例教程,主要展示了如何通过JNI在Java中调用C/C++库。项目名称中的"3.17.final.ok"可能表示这是一个经过多次迭代、最终稳定版本的示例,适合初学者和有经验的开发者进行...

    Hello-jni-ndk

    - **Java调用C/C++**:通过`System.loadLibrary("library_name")`加载本地库,然后通过`native`方法调用C/C++实现。 - **C/C++调用Java**:使用`JNIEnv`指针,通过`FindClass`, `GetMethodID`, `CallVoidMethod`等...

Global site tag (gtag.js) - Google Analytics