JNI入门

简介: JNI(Java Native Interface)实例:采用jni,调用C语言编写的dll,该dll负责打印出“Hello World,^_^.

JNI(Java Native Interface)

实例:采用jni,调用C语言编写的dll,该dll负责打印出“Hello World,^_^. JNI……..”
1、 编写java程序:

1):HelloWorld.java

Public class HelloWorld{

	Static{
		System.loadLibraray(“HelloWorld_C”);    //这个名字就是dll文件的文件名
	}
	
	Private native void showHelloWorld();
	
	Public void printHelloWorld(){
		showHelloWorld();
	}
	
}
AI 代码解读
2):cmd  javac HelloWorld.java           生成HelloWorld.class
3):cmd  javah HelloWorld               生成HelloWorld.h
内容如下:


4):编写包含main函数的类:HelloWorld_Test.java

public class HelloWorld_Test {
	public static void main(String[] args) {
		new HelloWorld().printHelloWorld();
	}
}
AI 代码解读

5):cmd javac HelloWorld_Test.java

2、编写HelloWorld_C.c

#include “jni.h”
#include “HelloWorld.h”      //这个就是刚才用javah命令生成的那个文件
JNIEXPORT void JNICALL Java_HelloWorld_showHelloWorld(JNIEnv * env, jobject obj){      
	//这个方法就是上图红色框住的部分,方法签名必须一样,不过要加上形参名字:JNIEnv * env, jobject obj
	//方法体里写具体实现
	printf(“Hello World,^_^. JNI……..”);
}
AI 代码解读
3、通过使用vs2010 的 “Visual Studio 命令提示(2010)”,输入如下命令:
cl –LD HelloWorld_C.c   //就是刚才编写的c文件,然后生成如下文件

注:1)、HelloWorld_C.c保存格式最好采用Unicode编码
2)、并非一定要使用vs2010的这个工具,肯定存在其他工具。由于本机上安装有vs2010,所以使用它了。至于还有其他哪些工具,这里就没有具体研究了。
3)、使用vs2010的这个工具时,需要将jni.h文件与HelloWorld.java文件放在一起。其实是和HelloWorld.h文件放在一起。

4、cmd java HelloWorld_Test,结果如下:


总结:从main函数入口开始执行,发现需要调用本地方法,于是去加载指定的dll文件。但是到底执行该dll里的哪个方法呢?会根据本地方法名按照某种特定的算法计算出该dll中的方法名,于是去执行该方法。(当然以上过程肯定是有出入的,这里只是提出一个大概的思路)。

目录
打赏
0
0
0
0
1
分享
相关文章
JNI学习
JAVA以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能。解决JAVA对本地操作的一种方法就是JNI。
1167 0
JNI开发极简教程
JNI(Java Native Interface) Java调用C/C++,C/C++调用Java的一套API 前言: 学习JNI需要C/C++的相关知识,而且需要研究JNI手册.
2499 0
JNI编程基础(一)
JNI-Java Native Interface,是Java平台提供的一个特性,通过编写JNI函数实现Java代码调用C/C++代码以及C/C++代码调用Java代码的作用。从而达到利用不同语言的特点
2696 0
|
10月前
|
[NDK/JNI系列02] JNI的设计原理与数据类型
[NDK/JNI系列02] JNI的设计原理与数据类型
77 0
[NDK/JNI系列02] JNI的设计原理与数据类型
[NDK/JNI系列01] NDK与JNI的基本概念与使用场景
[NDK/JNI系列01] NDK与JNI的基本概念与使用场景
119 0
NDK 系列(5):JNI 从入门到实践,万字爆肝详解!(上)
NDK 系列(5):JNI 从入门到实践,万字爆肝详解!
648 0
NDK 系列(5):JNI 从入门到实践,万字爆肝详解!(上)
NDK 系列(5):JNI 从入门到实践,万字爆肝详解!(下)
NDK 系列(5):JNI 从入门到实践,万字爆肝详解!(下)
300 0
NDK 系列(5):JNI 从入门到实践,万字爆肝详解!(下)
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等