[英]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.