免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
在java中實(shí)現(xiàn)調(diào)用簡單的c程序

以一個(gè)最簡單的HelloWorld程序來介紹一下JNI的最基本的使用方法:
1)首先要有一個(gè)HelloWorld.java。
這個(gè)是主文件,里面包括本地方法的java聲明,一個(gè)main函數(shù),還有一個(gè)靜態(tài)代碼段,用來導(dǎo)入所需要的動(dòng)態(tài)連接庫(在windows里是.dll)。
代碼如下:
//HelloWorld.java
class HelloWorld {
    public native void displayHelloWorld();//注意關(guān)鍵字native,這就說明這個(gè)方法是用本地方法實(shí)現(xiàn)的。

    static {//靜態(tài)代碼段里面導(dǎo)入了hello.dll。
        System.loadLibrary('hello');
    }
    
    public static void main(String[] args) {//調(diào)用本類的displayHelloWorld方法,(當(dāng)然了方法實(shí)際上是用c語言實(shí)現(xiàn)的)
        new HelloWorld().displayHelloWorld();
    }
}


2)編譯HelloWorld.java。
使用語句為:、
javac HelloWorld.java


3)使用javah命令生成一個(gè).h文件。
使用語句為:、
javah HelloWorld

   這就是實(shí)現(xiàn)displayHelloWorld()方法的c文件的頭文件。文件名為HelloWorld.h代碼如下:
    /* DO NOT EDIT THIS FILE - it is machine generated */
#include 
/* 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
可以看到,這個(gè)文件里面主要就是需要在c文件里面實(shí)現(xiàn)的方法的方法聲明。這個(gè)聲明和java文件HelloWorld.java的有一點(diǎn)區(qū)別,原來的方法不帶參數(shù),可是現(xiàn)在有了兩個(gè)參數(shù)。
這兩個(gè)是任何一個(gè)本地方法都必須有的參數(shù)。
第一個(gè)參數(shù)是JNIEnv*,它用于連接從java應(yīng)用程序傳給你的本地方法的參數(shù)和對象。第二個(gè)參數(shù)是一個(gè)jobject,它指向當(dāng)前對象本身,你也可以把它理解為java里面的this變量。對于一個(gè)本地實(shí)例方法,比如這個(gè)例子里的displayHelloWorld方法,jobject參數(shù)就是一個(gè)對象當(dāng)前實(shí)例的引用。對于本地類的方法,這個(gè)參數(shù)就是一個(gè)方法類的引用。在這個(gè)例子里面不需要使用這兩個(gè)參數(shù)。
    另外一點(diǎn),可以發(fā)現(xiàn)方法的名稱和java文件里的不一致,這個(gè)方法名由以下幾部分組成:
java_[包名+]類名_java方法名

  
4)編寫實(shí)現(xiàn)本地方法的c文件
 //本例中起名為HelloWorldImp.c
#include 
#include 'HelloWorld.h'
#include 

JNIEXPORT void JNICALL 
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) 
{
    printf('Hello world!/n');//這個(gè)例子中只輸出一行Hello World!
    return;
}


5)建立動(dòng)態(tài)連接庫
    在windows下面使用下面的語句:

cl -Ic:/j2sdk1.4.2/include -I c:/j2sdk1.4.2/include/win32  -LD HelloWorldImp.c -Fehello.dll

        這里面有幾部分。c:/j2sdk1是本地的java home的路徑。在include和include/win32目錄下面有產(chǎn)生動(dòng)態(tài)連接庫需要的幾個(gè).h文件,包括jni.h(在所有的實(shí)現(xiàn)native方法的c文件里面都要include這個(gè)文件)等等。
        將產(chǎn)生的.dll文件放到環(huán)境變量path能找到的目錄下?,F(xiàn)在運(yùn)行命令:
         java HelloWorld
         就會(huì)看到如下輸出:
         Hello World!

    這就是一個(gè)最簡單的JNI使用方法。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
JNI入門
Java中native關(guān)鍵字
Java入門--認(rèn)識(shí)理解Java中native方法
AndroidJNI基礎(chǔ)篇(一)
JNI調(diào)用機(jī)制
JNI學(xué)習(xí)(一)、JNI簡介和HelloWorld示例
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服