本篇文章綜合了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。
剩下的如果有問題,大家再討論吧,百度其實還是可以的,真能找的到答案。
快放假了,大家新年快樂!