JAVA JNI 使用实例
JAVA可以通过JNI接口访问本地的动态连接库,从而扩展JAVA的功能。使用JAVA JNI接口主要包括以下步骤:
(1)编写JAVA代码,注明要访问的本地动态连接库和本地方法;
(2)编译JAVA代码得到.class文件;
(3)使用javah -jni 生成该类对应的C语言.h文件;
(4)使用C/C++实现(3)生成的.h文件中声明的各函数;
(5)编译C/C++实现代码生成动态连接库。
本文使用一个简单的helloWorld示例演示JNI的使用。
(1)编写JAVA代码
public class helloWorld
{
public native void SayHello(String name);
static
{
System.loadLibrary("examdll");
}
public static void main(String [] argv)
{
helloWorld hello = new helloWorld();
hello.SayHello("myName");
}
}
(2)编译JAVA代码
javac helloWorld.java
(3)生成实现函数头文件
javah -classpath . helloWorld
得到的文件内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class helloWorld */
#ifndef _Included_helloWorld
#define _Included_helloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: helloWorld
* Method: SayHello
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_helloWorld_SayHello
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif
(4)在VC中实现上述函数
#include "helloWorld.h"
#include <stdio.h>
#include <string.h>
void JNICALL Java_helloWorld_SayHello(JNIEnv * env, jobject obj,
jstring str)
{
jboolean b = true;
char s[80];
memset(s, 0, sizeof(s));
strcpy_s(s ,(char*)env->GetStringUTFChars(str, &b));
printf("Hello, %s", s);
env->ReleaseStringUTFChars(str , NULL);
}
**** 这是JNI的关键:通过env我们可以使用JAVA提供的一组函数操作与转换函数传递的参数。
(5)编译VC项目得到动态连接库 examdll.dll。
===================================
附:如何操作与返回JAVA的参数与类型,这篇文章有些实际的例子可供参考:
http://blog.sina.com.cn/s/blog_548cc485010005ct.html
分享到:
相关推荐
本资源提供的“java jni简单实例”是一个实际应用JNI的示例,有助于学习和理解JNI的工作原理。 首先,我们来看JNI的核心概念: 1. **本地方法接口**:JNI定义了一套接口,使得Java代码能够声明本地方法(即非Java...
通过本文,我们可以了解 Java 和 C++ 之间的互相调用实例的实现过程,包括 C++ DLL 文件的创建和使用,以及 Java 代码中使用 JNI 技术调用 C++ DLL 文件的实现细节。这种技术可以应用于需要 Java 和 C++ 之间互相...
Java再次探讨JNI(Java Native Interface)这一主题,其主要目的是为了解决Java语言与本地代码交互的问题。...通过学习这些实例,开发者可以进一步提升在Java中使用JNI的能力,解决特定问题并提升程序性能。
Java Native Interface (JNI) 是Java平台提供的一种标准方式,允许Java代码和其他语言写的代码进行交互。在本示例中,我们将探讨如何通过JNI在Java中调用C++代码,并最终打包成可执行的JAR包。 首先,让我们理解...
7. 调用DLL函数:最后,通过创建之前定义的Java接口的实例,你可以通过Java代码调用DLL中的函数。例如: ```java YW60X nativeFunctions = (YW60X) Native.loadLibrary("YW60X", YW60X.class); int result = ...
在这个"Java jni调用c实例"中,我们将深入探讨如何通过JNI在Java应用程序中调用C语言编写的函数。 首先,我们需要了解JNI的基本结构。一个典型的JNI程序包括Java源代码、C/C++源代码以及对应的头文件。Java源代码中...
- 使用JNI可以利用C/C++的高性能特性,但需要注意过度使用JNI可能导致性能下降,因为Java和本地代码之间的切换有额外开销。 - 适当选择哪些部分代码用JNI实现,如性能敏感的计算或调用操作系统API。 通过深入学习...
在《Java_JNI_获得系统进程信息实例.doc》中,我们探索了一个利用Java Native Interface (JNI)来获取操作系统进程信息的示例项目。该项目由三个主要部分组成:`systemProcess.java`,`dataProcess.java`以及`process...
本实例提供了一个使用JNI调用C++ DLL(动态链接库)的示例,对于学习和理解JNI的工作原理及其应用非常有帮助。 首先,我们来了解JNI的基本概念。JNI包含了一组头文件和库,它们定义了Java虚拟机(JVM)与本地代码...
### Java JNI调用动态库(Linux、Windows)的实现步骤 #### 一、概述 Java Native Interface (JNI) 是一种标准的 Java 接口,它允许 Java 代码和其他语言(如 C 或 C++)编写的代码进行交互。通过 JNI,Java 应用...
在这个“GMSSL的java调用(JNI库和调用实例).zip”压缩包中,我们主要探讨如何在Java环境中通过JNI(Java Native Interface)来调用GMSSL库,以便利用这些国密算法进行数据加解密和哈希运算。 首先,我们需要了解...
在"传智播客JNI教程"中,可能会详细讲解以上各个方面,并通过实例演示如何创建和使用JNI,帮助学习者通过实践来加深理解和掌握。教程可能还会涵盖JNI的最新发展,如Java 9及以后版本引入的改进,以及在Android开发中...
总结来说,这个实例展示了Java通过JNI调用C++本地方法的基本流程,包括Java端的声明、JNI头文件的生成、C++的实现、动态链接库的编译以及最终的调用。虽然这个实例没有涉及复杂的类型转换,但在实际应用中,根据数据...
本实例“Jni完整实例”提供了一个完整的流程,教你如何在Eclipse环境下使用NDK进行JNI开发,并且项目可以直接运行,这对于理解JNI和NDK的工作机制非常有帮助。 首先,要理解JNI的核心概念。JNI是一种接口,它定义了...
3. **优化性能**:对于时间敏感的代码片段,如图形处理或高性能计算,底层语言如C++可能会提供更好的性能,因此可以使用JNI在Java中调用这些代码。 **书写步骤** 1. **编写Java类**:首先定义一个Java类,其中包含...
Java JNI例子-创建DLL、项目导入DLL、IDEA配置JNI、JNI调用DLL(该DLL同时依赖第三方DLL)
Java JNI(Java Native Interface)是Java...通过这个教程,你可以系统地学习JNI的使用,掌握如何有效地在Java和本地代码之间建立桥梁。如果你对Java平台的扩展或者跨语言编程感兴趣,那么这个压缩包里的内容不容错过。
在本实例中,我们将探讨如何使用Eclipse集成开发环境来创建一个简单的JNI项目,实现C语言与Java之间的字符串传递。 首先,我们需要了解JNI的基本概念。JNI提供了一种方式,使得Java应用程序能够调用本地(非Java)...
在本实例中,我们将深入探讨如何使用纯C语言通过JNI调用Java对象的方法。这个例子特别适合那些需要利用C/C++的高效性能,同时又需要与Java应用程序集成的开发者。 首先,我们需要理解JNI的基本概念。JNI提供了一套...
JAVA使用JNI读写INI文件的实例。 JAVA本身并没有读写INI文件的现成方法,有些人自己编写方法来读写INI文件,但是这样的方法或多或少的存在着一些问题。此示例旨在利用本地的WIN32API函数来读写INI文件,这样可以保证...