gpt4 book ai didi

java - 在不使用 JNI 的情况下从 Java 调用 native 函数(使用堆栈操作)

转载 作者:太空宇宙 更新时间:2023-11-04 06:40:05 25 4
gpt4 key购买 nike

我目前正在制作一个在嵌入式设备(POS 终端)上运行的 Java 应用程序。此设备具有制造商特定的虚拟机。

与硬件交互的函数定义在这个虚拟的C文件中机器的来源(在配置文件 AFAIK 中)。

我无法从我的 java 代码中调用这些函数,因为根据官方文档,虚拟机既不支持 JNI 也不支持 KNI,它只支持“堆栈操作”作为一种连接 C 和 java 代码的方法。

据我所知, native 函数的参数是使用堆栈传递的。在调用函数之前推送参数并将它们弹出到函数内部(原型(prototype)具有无效参数)。我想应该做类似的事情来调用函数,也许与调用堆栈有关?

真正的问题是,如何使用“堆栈操作”连接 C 和 java?

更新:要调用的函数示例(C 代码)它在设备屏幕上打印一条消息。

void PrintAt(void)
{
Array msg = popStackAsType(Array);
int y = popStack();
int x = popStack();
NativePrint(x,y,msg->bdata);
}

最佳答案

您实际上无法期望这样做,因为您无法控制堆栈。 JVM 控制堆栈,任何所谓的堆栈操作都只是一种卑鄙的 hack。如果没有 JNI 或类似的东西,您最好的解决方案可能是在单独的进程中执行 C 代码并使用某种形式的 IPC 与其通信。

关于java - 在不使用 JNI 的情况下从 Java 调用 native 函数(使用堆栈操作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9843616/

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