我可以存储 JNI Java Env 变量吗?

Mar*_*ior 5 java java-native-interface

我正在制作一个库,以便 cpp 应用程序可以与 JVM 通信。假设 JVM 已经启动,如何让 cpp 二进制文件与 JVM 通信?我认为最好的解决方案是将 JNI env 变量存储在共享对象中(所以我可以将它包含在 cpp 中并稍后使用。

那可能吗?

编辑 - -

我想在 JVM 之外获取 JavaVM 接口,类似于这种方法:

  • GetJavaVM 返回当前虚拟机实例的 JavaVM 接口指针。

kdg*_*ory 2

您的问题不清楚:听起来您希望 C++ 应用程序与作为单独进程运行的 JVM 进行通信。在这种情况下,您需要使用某种形式的进程间通信,例如管道、套接字、CORBA 等。与所有指针一样,JNIEnv 指针仅在使用它的进程内有效。

我认为适合您问题的唯一情况是,如果您启动 Java 程序,调用本机方法,然后该本机方法启动单独的线程。在这种情况下,不,您不能共享 JNIEnv 指针,因为它绑定到线程。但是,您可以使用JNI 调用 API从 C++ 线程访问 Java VM。