国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

用JNI調用C或C++動態聯接庫入門

2019-11-18 16:18:50
字體:
來源:轉載
供稿:網友

因工作的緣故,有機會接觸了java本地方法調用(JNI)。本文中記下了初試JNI的過程和一點點體會。

使用Java的JNI調用C/C++的動態聯結庫有個固定的步驟,下面將以一個最簡單的HelloWorld例子程序來說明調用過程。這個HelloWorld的例子只是簡單的顯示HelloWorld消息。

  

第一步 編寫Java類

首先,我們創建一個名為jnitest的Eclipse工程,并新建一個src源代碼目錄。

這里我們編寫兩個Java類,一個命名為HelloWorld,一個命名為TestDLL。HelloWorld類包含一個本地方法displayHelloWorld(),TestDLL用于測試這個本地方法。HelloWorld的源碼清單如下:

 

List1. HelloWorld.java源碼

 

public class HelloWorld {

    public native void displayHelloWorld();①

    static{

       System.loadLibrary("HelloWorld");  ②

    }

}

 

TestDLL源碼如下:

 

List2. TestDLL.java源碼

 

public class TestDLL {

    public static void main(String[] args){

       HelloWorld helloWorld = new HelloWorld();


       helloWorld.displayHelloWorld();

    }

}

說明:①是java本地方法申明;②裝入動態鏈接庫,"HelloWorld"是要裝入的動態鏈接庫名稱。

  

  

第二步 編譯Java類

在Eclipse工具中編譯Java類。編譯后的class文件會自動放入工程目錄下的bin目錄中。

第三步 生成C/C++頭文件

在windows中打開一個命令窗口,進入jnitest工程所在目錄下的bin目錄如:D:/workspace/jnitest/bin。鍵入javah -classpath D:/workspace/jnitest/bin HelloWorld命令生成頭文件HelloWorld.h。內容如下:

 

List3. HelloWorld.h源碼

 

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

#include <jni.h>

/* Header for class HelloWorld */

 

#ifndef _Included_HelloWorld

#define _Included_HelloWorld

#ifdef __cplusplus

extern "C" {

#endif

/*

 * Class:     HelloWorld


 * Method:    displayHelloWorld

 * Signature: ()V

 */

JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld

  (JNIEnv *, jobject);

 

#ifdef __cplusplus

}

#endif

#endif

 

注意,不要修改這個頭文件。

第四步 編寫本地方法實現

用VC6創建HelloWorld Win32動態鏈接庫工程。將上述生成的頭文件HelloWorld.h拷貝到

D:/PRogram Files/Microsoft Visual Studio/MyProjects/HelloWorld目錄下面。

將D:/j2sdk1.4.2/include目錄下的jni.h和D:/j2sdk1.4.2/include/win32/jni_md.h兩個頭文件拷貝到VC安裝目錄下的D:/Program Files/Microsoft Visual Studio/VC98/Include目錄下面。在VC IDE中新建HelloWorld.cpp文件,實現頭文件中聲明的方法并編譯生成DLL。

 

List4. HelloWorld.cpp源碼

 

#include "HelloWorld.h"

#include <stdio.h>

 

/*

 * Class:     HelloWorld


 * Method:    displayHelloWorld

 * Signature: ()V

 */

JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld

  (JNIEnv *, jobject)

 {

    printf("Hello World!/n");

    return;

}

第五部 運行測試程序

先將生成的DLL拷貝到jnitest工程的D:/workspace/jnitest/bin下面,然后設置DLL搜索路徑(環境變量PATH)為D:/workspace/jnitest/bin(JNI并沒有規定必須將dll放在與class文件相同的目錄,只要確保JVM能搜索到DLL即可)③。重新啟動Elipse后,運行測試程序,將看到控制臺輸出“Hello World!”

 

注意,③必須設置好DLL搜索路徑,或者將dll拷貝到C:/WINDOWS/system32下面。這里,我折騰了不少時間,才搞定。

(出處:http://www.survivalescaperooms.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 玛纳斯县| 蓬溪县| 平定县| 溧阳市| 交口县| 永兴县| 布拖县| 兴海县| 阳朔县| 邳州市| 永靖县| 彰武县| 庆云县| 宜都市| 潮州市| 延安市| 云霄县| 长宁县| 吉木乃县| 沙田区| 海兴县| 普安县| 苍山县| 南澳县| 钟祥市| 商洛市| 修武县| 秀山| 石家庄市| 达拉特旗| 绥化市| 磐石市| 长宁区| 聊城市| 惠州市| 阜康市| 韶山市| 化州市| 金昌市| 赫章县| 嵊泗县|