JNI 簡單使用

本篇文章綜合了jni百度詞條以及其他網友的知識,如有不對請指正。

工具:eclipse, 命令行,vc++6.0

過程:
1. 在eclipse中編寫代碼:

package testbasic;

public class HelloWorld {
    public native void displayHelloWorld();//
    static {
        System.loadLibrary("HelloWorld");//
    }
    public static void main(String[] args) {
        new HelloWorld().displayHelloWorld();
    }
}

工程結構如圖:

這裏寫圖片描述

2.生成.h文件
先找到編譯後的.class文件位置。比如,我的在
這裏寫圖片描述

然後在命令行生成.h文件,
這裏寫圖片描述

javah -classpath . -jni testbasic.HelloWorld

然後就會生成一個.h文件,留着它一會兒用。
這裏寫圖片描述

生成的.h文件內容是這樣的:

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

#ifndef _Included_testbasic_HelloWorld
#define _Included_testbasic_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     testbasic_HelloWorld
 * Method:    displayHelloWorld
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_testbasic_HelloWorld_displayHelloWorld
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

3.在vc++6.0中生成.dll文件(似乎叫動態鏈接庫)
第一步,創建工程,
這裏寫圖片描述

這裏寫圖片描述

第二步,編寫.cpp文件

函數名要和.h文件中保持一致

這裏寫圖片描述

// HelloWorld.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"

#include "jni.h"
#include "testbasic_HelloWorld.h"

//#include otherheaders

JNIEXPORT void JNICALL
Java_testbasic_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
    printf("Helloworld!\n");
    return;
}

需要注意的是需要把用到的.h文件放到 D:\360安全瀏覽器下載\Microsoft Visual Studio2\VC98\Include文件夾下,
用到的.h文件有,
這裏寫圖片描述
(這幾個在jdk的include文件夾下可以找到),還有剛纔的生成的.h文件。

第三步,執行
首先打開StdAfx.h,按f7執行;
然後打開HelloWorld.cpp, 按f7執行;這樣.dll文件就成功生成了

這裏寫圖片描述

4.把這個.dll文件放到jdk的bin文件夾下, 然後回到eclipse,
運行HelloWorld.java, 就能輸出結果了。
這裏寫圖片描述

我在這個過程中遇到了很多的問題,很多是在網上找答案,不知不覺的解決了;
其中有一個問題是.dll文件的位置問題,直到昨晚12點多才在網上找到了答案,感謝碼農先生網友的文章,http://blog.csdn.net/FOR_CHINA2012/article/details/9307361
剩下的如果有問題,大家再討論吧,百度其實還是可以的,真能找的到答案。

快放假了,大家新年快樂!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章