Java 有没有一种方法可以使用JNI调用本机主函数?

Java 有没有一种方法可以使用JNI调用本机主函数?,java,c,java-native-interface,calling-convention,Java,C,Java Native Interface,Calling Convention,我不知道这是否可行,但是有没有一种方法可以使用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 mai

我不知道这是否可行,但是有没有一种方法可以使用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()函数


您还需要考虑,主()函数是否与JVM兼容。如果main()只是做了一些工作,然后返回,那么它可能会是。但是如果它可能最终调用exit(),那么将结束承载jvm的进程。如果main不能很快返回,您可能需要从一个线程中完成这一切,或者在JNI调用之前在java端创建,或者在JNI兼容函数的本机端创建,并让它启动的线程调用main()。

问得好,我看不出为什么不可能。。。这是一个类似于其他函数的函数。但这样做很奇怪。使用
ProcessBuilder
不是更简单吗?也许您可以使用
本机mainAdapter(int-argc,char[][]argv)
,它将
argv
固定或复制到指针,然后调用
main