gpt4 book ai didi

java - 有没有办法使用 JNI 调用 native 主函数?

转载 作者:太空宇宙 更新时间:2023-11-03 23:52:07 24 4
gpt4 key购买 nike

我不知道这是否可能,但是有没有办法使用 JNI(Java native 接口(interface))使用 .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[] 作为 native 函数的参数时遇到错误。但我希望这能让我理解我正在尝试做的事情。任何帮助将不胜感激。

最佳答案

有可能最终调用本地 main() 函数,但不可能直接从 Java 调用,原因有二:

1) JNI 函数必须符合特定的命名方案,该方案对它们在 Java 包/类层次结构中的位置进行编码

2) JNI函数只能有特定的java兼容数据类型作为参数和返回值

您的解决方案是创建一个具有 JNI 兼容参数和返回类型的 JNI 兼容函数,该函数将参数和调用从其主体内转换为普通的 native main() 函数。

您还需要考虑 main() 函数的功能是否与 jvm 兼容。如果 main() 只是做一些工作然后返回它可能会。但是,如果它可能最终调用 exit() ,这将结束托管 jvm 的进程。如果 main 不会很快返回,您可能需要从一个线程执行所有操作,该线程可以在 JNI 调用之前在 java 端创建,或者在 JNI 兼容函数的 native 端创建,并让它启动的线程调用 main ().

关于java - 有没有办法使用 JNI 调用 native 主函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17429128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com