`

Java JNI 调用DLL库

阅读更多

JNI

Java Name Interface 的缩写,这个很重要,看到这个就知道这是干什么的。

JNI主要是解决Java调用DLL库文件的问题。

具体的下面做详细说明:

首先配置java(这个就不多说了)

在来检查一下JNI是否好用 cmd——javah

好了我们开始编写简单的代码来说明这个JNI到底怎么用:

package test;

 

public class TestJNI {

 

    public native void displayHelloWorld();

 

    static {

        System.loadLibrary("JNITest");

    }

 

    public static void main(String[] args) {

        new TestJNI().displayHelloWorld();

    }

 

}

以上是基本的代码,我们知道java 是运行在虚拟机上的,那么DLL是面对操作系统的,这个就麻烦了,因为在不同层,但java有一个关键字native,聪明的sun公司它是用来解决这个问题。

好了我们编译上面的文件然后在cmd中输入 javah –o 生成后的名字 –classpath 需要的jar java类名

例子:

 javah -o testJNI.h test.TestJNI

文件生成了

/* DO NOT EDIT THIS FILE - it is machine generated */

#include "jni.h"

/* Header for class test_TestJNI */

 

#ifndef _Included_test_TestJNI

#define _Included_test_TestJNI

#ifdef __cplusplus

extern "C" {

#endif

/*

 * Class:     test_TestJNI

 * Method:    displayHelloWorld

 * Signature: ()V

 */

JNIEXPORT void JNICALL Java_test_TestJNI_displayHelloWorld

  (JNIEnv *, jobject);

 

#ifdef __cplusplus

}

#endif

#endif

 

好了我们实现一下 上面的东西然后看看能不能有东西出来:

1.      创建一个C++ Class library工程

2.      最佳3个头文件jni.hjni_md.htest_TestJNI.h

3.      实现方法

// This is the main DLL file.

 

#include "stdafx.h"

#include "jni.h"

#include "test_TestJNI.h"

 

JNIEXPORT void JNICALL Java_test_TestJNI_displayHelloWorld

(JNIEnv *evn, jobject jobj)

{

        printf("Hello World");

}

好了以上就好了

下面我们将生成的DLL放到Java工程根目录下

出项 Hello World 实现成功(Success

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics