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的基本实例,可以运行,包含了其中的cpp文件,简单易懂,喜欢的下载!
JNI 调用 c pp互相调用实例, java JNI cpp互相调用实例
Java jni调用c实例
利用JAVAH生成C++的JNI类,使用JAR打包生成可执行包
NULL 博文链接:https://zhaoningbo.iteye.com/blog/1098817
Java_JNI_获得系统进程信息实例.doc
java 的jni本地调用简单实例,本实例不牵扯到java传值给c++进行转换变值等操作,因为java和c++的类型不匹配,需要进行复杂转换。
这两天要弄个JAVA调用DLL,研究了一下有点绕, java部分要生成.h头文件,所以弄了个例子在这分享下 JAVA调用DLL完整步骤 步骤里包括java部分代码及vc写的DLL代码
第一次用java的jni调用c++的dll程序,运行挺好的,内部还有很多说明,有兴趣的可以看看哟!!!
本实例为java对jni的调用,实现c到java的字符串传递. 详细见:http://blog.csdn.net/xuwenneng/article/details/54311589
jni实例教程,帮助深刻理解jni机制概念以及如何运用的方式
JAVA使用JNI读写INI文件的实例。 JAVA本身并没有读写INI文件的现成方法,有些人自己编写方法来读写INI文件,但是这样的方法或多或少的存在着一些问题。此示例旨在利用本地的WIN32API函数来读写INI文件,这样可以保证...
完整使用ndk开发jni实例,本例使用eclipse及其native 支持开发,项目可以直接运行
基于最新版本的gmssl,实现了java通过jni调用gmssl,可使用国密sm2算法、sm3算法和sm4算法,包括jni的动态库和java调用示例
JAVA通过JNI调用C++代码函数的示例DEMO
很小的一个JNI调用实例,并且介绍一些JNI调用的一些常见问题的解决办法。
JNI的小例子 实现java与C++的方法互调 简单易懂 添加注释
在java中调用jni中返回的对象或对象数组,即相当于helloword
JNI的示例代码, C的代码如何调用Java的对象的方法。编译环境:cygwin, makefile. 纯C
自己收集的JNI学习资料(包括JAVA初级教程 j-jni.zip JNI.pdf jni(1).pdf ), 个人认为内容很全,尤其是j-jni.zip 里面是IBM的在线教程,非常实用,理论例子都很全,是JNI学习的入门帮手.