Java之_初识JNI

JNI(Java Native Interface)是用于Java与C、C++交互的标准方法,使用JNI我们可以在Java程序中调用C、C++编写的方法。下面以一个简单的示例来说明整个过程。

1、编写Java调用本地方法的类:

public class JNITest {

	static {
		/* 加载本地动态库 */
		System.loadLibrary("HelloJNI");
	}

	/**
	 * 本地方法定义
	 * 
	 * @param i
	 * @param f
	 * @param d
	 * @param c
	 * @param str
	 * @return
	 */
	public native String printDate(int i, float f, double d, char c, String str);

	/**
	 * Main
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		String str = new JNITest().printDate(2, 2.2f, 1.234567890, 'A',
				"ABCD");
		System.out.println("Native return:" + str);
	}
}

2、上述程序生成.class文件后,使用javah.exe(位于JDK的bin下)生成一个JNITest.h:

F:\javaProject\JNITest\bin>javah JNITest

生成的头文件内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class JNITest */

#ifndef _Included_JNITest
#define _Included_JNITest
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     JNITest
 * Method:    printDate
 * Signature: (IFDCLjava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_JNITest_printDate
  (JNIEnv *, jobject, jint, jfloat, jdouble, jchar, jstring);

#ifdef __cplusplus
}
#endif
#endif

3、编写C++程序,实现本地方法,方法的实现参照第2步生成的头文件里面的方法:

#include "stdafx.h"
#include "HelloJNI.h"
#include "jni.h"
#include "JNITest.h"
#include <stdio.h>

JNIEXPORT jstring JNICALL Java_JNITest_printDate
	(JNIEnv *env, jobject obj, jint i, jfloat f, jdouble d, jchar c, jstring str){
	printf("C print int:%d\n", i);
	printf("C print int*float:%f\n", i*f);
	printf("C print double:%f\n", d);
	printf("C print char:%c\n", c);
	printf("C print string:%s\n", str);

	return str;
}
按下面的配置指定使用到的头文件jni.h和JNITest.h的路径:


4、上面的程序生成成功后,在工程Debug目录下存在“HelloJNI.dll”文件,现在回到第1步的Java程序,配置运行参数:

运行结果如下:


其中存在乱码,下篇Blog再详细讲一下Java中的数据类型与C、C++之间的异同。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值