Java接触有一阵时间了,一直听说过JNI(Java Native Interface,Java本地接口),以我的理解是Java程序中调用C/C++等等语言编写的动态库之类的方法,具体机制还不是特别清楚,一直也没有用过。最近没事的时候查看了下JDK的源码,发现里面有很多native关键字,于是乎,趁今天没事,就花了下时间来弄个简单的实验,仅仅是通过Java调用C/C++产生的dll动态链接库里面的函数,对于C/C++中使用Java中的类型等,则下一次再深入去研究研究。在这就把所作实验的过程做下记录,以备以后查询所用。
1、工具:
===MyEclipse 8.6 编写Java类
===eclipse-cpp-helios-SR2 产生C/C++的Dll文件
===JDK1.6
2、通过JNI调用本地方法的步骤如下:
2.1、编写调用本地接口的Java类:JNICAller.java
package org.clzps;
public class JNICaller {
static {
System.loadLibrary("libTestJNI");
}
public JNICaller() {}
public native void print();
public native int Add(int a, int b);
}
2.2、通过jdk里面的工具javah产生对应的C/C++头文件.h,命令如下:
javah -jni org.clzps.JNICaller
2.3、在目录下则会产生如下所示的类似文件:org_clzps_JNICaller.h
2.4、启动eclipse-cpp-helios-SR2(关于eclipse-cpp-helios-SR2配置这里不做描述),并且新建一个C Project类型的Shared Library类型的项目,如下图所示:
复制org_clzps_JNICaller.h至新建的项目当中,根据org_clzps_JNICaller.h文件新建对应的org_clzps_JNICaller.c源文件,如下所示:
/*
* org_clzps_JNICaller.c
*
* Created on: 2011-6-20
* Author: Administrator
*/
#include <jni.h>
#include "org_clzps_JNICaller.h"
#include <stdio.h>
/*
* Class: org_clzps_JNICaller
* Method: print
* Signature: ()V
*/
JNIEXPORT void JNICALL _Java_org_clzps_JNICaller_print
(JNIEnv *env, jobject jobj) {
printf("Welcome to JNI's World!");
}
/*
* Class: org_clzps_JNICaller
* Method: Add
* Signature: (II)I
*/
JNIEXPORT jint JNICALL _Java_org_clzps_JNICaller_Add
(JNIEnv *env, jobject jobj, jint a, jint b) {
int sum = 0;
sum = a + b;
return sum;
}
在Project-->Properties-->C/C++ General-->Paths and Symbols的Includes里面添加jvm.h等相关的头文件,如下图所示:
并且选择顶部Configuration为Release Active,然后Build Project,如果不出错将产生需要的libTestJNI.dll文件,供Java调用;
2.5、将libTestJNI.dll拷贝至System.getProperty("java.library.path")的路径中,关于这个路径请参考其他的资料;
2.6、编写测试JNICaller类得单元测试:
package org.clzps;
import junit.framework.TestCase;
public class TestJNICaller extends TestCase {
public void testCase() {
JNICaller caller = new JNICaller();
caller.print();
assertEquals(30, caller.Add(10, 20));
}
}
2.7,通过mvn test进行测试,出现正确的结果:
3、至此、Java已经通过native成功调用了C/C++编写的动态链接库.dll
- 大小: 51.7 KB
- 大小: 124.8 KB
- 大小: 68.5 KB
分享到:
相关推荐
在这个"JNI开发实例——锅炉压力监控器的源码"中,我们将深入探讨如何使用JNI来开发一个实时监控锅炉压力的系统。这个系统可能是为了确保工业生产过程中的安全性和效率,通过硬件接口获取实时数据,并在Java应用程序...
在这个“jni例子——使用int数组”的示例中,我们将深入探讨如何在Java和C/C++之间传递和操作int数组。 1. **JNI基础知识**: - JNI接口提供了Java与本地代码(如C/C++)通信的桥梁,使得开发者可以在Java应用中...
Java JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多情况下被用来调用本地库,比如C、C++编写的库,这在处理特定硬件设备或者高性能计算时非常有用。在...
在传统的JNI开发中,我们通常在Java类中声明`native`方法,然后在对应的`.c`或`.cpp`文件中使用`JNIEXPORT`和`JNICALL`宏定义来实现这些方法。然而,当有大量类需要添加本地方法时,这种静态注册方式会变得繁琐且...
9. **JNI(Java Native Interface)**:当JAVA代码需要调用本地(C/C++)代码时,JNI提供了桥梁,学习笔记会介绍如何使用JNI进行跨语言交互。 10. **JAVA标准库**:包括JDBC(数据库连接)、Swing(GUI开发)、JAXP...
JNI,全称Java Native Interface,是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。这篇博客“JNI编程(二) —— 让C++和Java相互调用(2)”显然深入探讨了如何利用JNI实现Java与C++之间的互调用...
在Android平台上,JNI(Java Native Interface)允许开发者使用C++代码来增强应用程序的功能,尤其是在处理图形和计算密集型任务时,如使用OpenGL ES和OpenCV。这个特定的项目旨在通过JNI调用来结合这两个强大的库...
JNI,全称为Java Native Interface,即Java本地接口,JNI是Java调用Native 语言的一种特性。通过JNI可以使得Java与C/C++机型交互。即可以在Java代码中调用C/C++等语言的代码或者在C/C++代码中调用Java代码。由于JNI...
本教程将深入讲解如何使用Java通过JNI来调用DLL,并提供一个具体的实例——调用MessageBox函数。 首先,理解JNI的概念是至关重要的。JNI是Java平台标准的一部分,它为Java程序员提供了一种安全、高效的方式来调用...
Java可以通过JNI(Java Native Interface)或者第三方库如JNA(Java Native Access)来实现这一功能。本文将深入探讨这两种方法,以及如何在Java中调用C语言编写的SO(Linux下的动态链接库)和DLL(Windows下的动态...
JNI,全称Java Native Interface,是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都是必要的,比如当Java需要利用特定的系统功能,或者需要与已有的C/C++库集成时。在这个场景...
15. **JNI(Java Native Interface)**:Java的本地接口允许Java代码调用C/C++的库,实现性能优化或调用特定平台的功能。 Java JDK 6学习笔记——PPT简体版将详细解析以上知识点,通过实例演示和清晰的讲解,帮助...
方法区存储类信息、常量、静态变量等,而直接内存则用来优化Java程序对非Java内存的访问,如JNI(Java Native Interface)的使用。 理解JVM的底层结构对于Java开发者来说非常重要,因为它有助于优化代码性能,比如...
标题与描述均指向了一个具体的技术主题——通过JNI(Java Native Interface)在C语言环境中启动Java虚拟机并调用Java类。这一技术应用广泛,尤其是在需要跨语言编程或利用Java的特性(如垃圾回收、多线程)而底层...
JNI,全称Java Native Interface,是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都是必要的,比如调用操作系统本地库、加速性能关键的代码或者利用硬件特性等。本文将深入...
本篇文章将深入探讨这个问题,并提出一种另类的解决方案——利用JNI(Java Native Interface)进行加密和解密操作来规避乱码问题。 首先,我们需要理解为什么会出现中文乱码。这通常与字符编码有关,Java和JSP默认...
### JNI攻略之一——建立一个简单的JNI程序:详细解析 #### 一、理解JNI与跨语言编程 JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码与其他语言(如C/C++)编写的代码进行交互。这在需要高...