JNI入门

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值