JNI初试牛刀

1、建一个java工程取名JniDemo,并新建一个类JniDemo,类里定义native方法,代码如下:

package com.jni.demo;

import java.io.ObjectInputStream.GetField;

public class JniDemo {
    public native String getJniStr();
    
    static{
    	System.loadLibrary("JniDemo");
    }
    
	public static void main(String[] args) {
		JniDemo jd = new JniDemo();
		String s = jd.getJniStr();
		System.out.println("来自 jni的字符串:--- "+s); 
	}

2、生成jni的头文件;

     打开windows命令行,进行项目src目录,并执行javah命令:

     

这样就会自动生成一个名叫jni的目录,里面有了相关的头文件


3、打开visual studio 2013并新建一个win32项目,将之前通过javah命令生成的头文件复制到visual studio 2013所建的项目目录,并导入,接着把jdk安装目录(如 Java\jdk1.8.0_20\)的include目录下的jni.h和include\win32目录中的jni_md.h两个头文件复制到visual studio 2013所建的项目目录,并导入




打开生成的jni头文件com_jni_demo_JniDemo.h并把#include <jni.h>改成#include "jni.h",代码如下

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

#ifndef _Included_com_jni_demo_JniDemo
#define _Included_com_jni_demo_JniDemo
#ifdef __cplusplus
extern "C" {
#endif
	/*
	* Class:     com_jni_demo_JniDemo
	* Method:    getJniStr
	* Signature: ()Ljava/lang/String;
	*/
	JNIEXPORT jstring JNICALL Java_com_jni_demo_JniDemo_getJniStr
		(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

新建一个.c的源文件,记住一定是.c为后缀而不是.cpp





在JniDemo.c的源文件中实现生成的头文件的方法;代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
#include <string.h> 
#include "com_jni_demo_JniDemo.h"

JNIEXPORT jstring JNICALL Java_com_jni_demo_JniDemo_getJniStr
(JNIEnv *env, jobject job){
	return (*env)->NewStringUTF(env, "jni test string"); 
}

设置visual studio 2013的项目为dll项目




生成dll动态库文件:


控件台会打出相关信息:


新建一个文件夹专门放自己生成的dll文件,这里我那的文件夹为D:\e\Clib,并把文件夹路径放入环境变量Path中,设置环境变量后最好重启一下计算机,以使之生效

把生成的dll文件放入该Clib目录,把dll文件名和java类中loadLibrary方法中的名称相同,这里是JniDemo.dll

运行效果如图:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值