簡體   English   中英

有沒有一種方法可以使用JNI調用本地主函數?

[英]Is there a way to call a native main function using JNI?

我不知道這是否可行,但是有沒有辦法使用JNI(Java本機接口)使用.java文件來調用.c文件的主要功能? 例如

偽代碼:

/*This is the .c file*/
int main(int argc, char* argv[]){

    File pFile;
    pFile = fopen(argv[1],"r"]);
    fclose(argv[1]);
}

再次偽代碼:

/*This is the .java file*/

public class maincpy{

    static
    {
        System.loadLibrary("maincpy");
    }

    public native int maincpy(int argc, char* argv[]); //

    public static void main(String[] args){
        maincpy c = new maincpy();
        c.main(2,"somefile.txt");
    }
}

我知道我寫的是不正確的,因為使用char * argv []作為本機函數的參數會出錯。 但是,我希望這能使我理解我的想法。 任何幫助,將不勝感激。

最終可以調用本機main()函數,但不可能直接從Java調用,原因有兩個:

1)JNI函數必須遵循特定的命名方案,該方案對它們在Java包/類層次結構中的位置進行編碼

2)JNI函數只能具有特定的Java兼容數據類型作為參數和返回值

您的解決方案是使JNI兼容函數具有JNI兼容參數和返回類型,該函數將參數和調用從其體內轉換為普通的本機main()函數。

您還需要考慮main()函數的功能是否與jvm兼容。 如果main()只是做了一些工作,然后返回,可能就可以了。 但是,如果最終可能會調用exit(),則將結束托管jvm的進程。 而且,如果main不會很快返回,則可能需要通過一個線程(在JNI調用之前在Java端創建,或者在JNI兼容函數的本機端創建)執行全部操作,並讓它開始調用main ()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM