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();
	}
	
}
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();
	}
}

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……..”);
}
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中的方法名,于是去执行该方法。(当然以上过程肯定是有出入的,这里只是提出一个大概的思路)。

目录
相关文章
|
6月前
|
存储 Java C++
[NDK/JNI系列02] JNI的设计原理与数据类型
[NDK/JNI系列02] JNI的设计原理与数据类型
48 0
[NDK/JNI系列02] JNI的设计原理与数据类型
|
6月前
|
Java API Android开发
[NDK/JNI系列01] NDK与JNI的基本概念与使用场景
[NDK/JNI系列01] NDK与JNI的基本概念与使用场景
70 0
|
Java 测试技术 C#
【开发者笔记】java 利用jna调用c#的dll
          一、需求阐述:   如果我们的项目利用c#开发,到了开发后期需要和java组进行合作,其中有一部分业务逻辑利用c#已经code completed,那么我们可能会考虑用java来调用现成的c#dll实现需求。
17405 0
|
6月前
|
Rust Java Linux
【一起学Rust | 进阶篇 | jni库】JNI实现Java与Rust进行交互
【一起学Rust | 进阶篇 | jni库】JNI实现Java与Rust进行交互
206 0
|
缓存 Java 编译器
JNI基础简介
JNI系列入门连载,开启JNI学习之旅吧。
109 0
|
存储 缓存 安全
NDK 系列(5):JNI 从入门到实践,万字爆肝详解!(下)
NDK 系列(5):JNI 从入门到实践,万字爆肝详解!(下)
258 0
NDK 系列(5):JNI 从入门到实践,万字爆肝详解!(下)
|
算法 Java Linux
NDK 系列(5):JNI 从入门到实践,万字爆肝详解!(上)
NDK 系列(5):JNI 从入门到实践,万字爆肝详解!
568 0
NDK 系列(5):JNI 从入门到实践,万字爆肝详解!(上)
|
Java Unix Linux
JNI学习(0)——关于JNI
JNI学习(0)——关于JNI
140 0
JNI学习(0)——关于JNI
|
Java
JNI学习(3)——运行基于JNI的java程序
JNI学习(3)——运行基于JNI的java程序
97 0
JNI学习(3)——运行基于JNI的java程序
|
Java C++ Android开发
JNI开发极简教程
JNI(Java Native Interface) Java调用C/C++,C/C++调用Java的一套API 前言: 学习JNI需要C/C++的相关知识,而且需要研究JNI手册.
2460 0