【发布时间】:2014-08-07 18:25:30
【问题描述】:
我需要从 C 代码中调用一些 Java 函数。我找到了一些关于如何从 C 创建新 jvm 的教程,但我需要一个现有的 jvm(我知道她的 PID)。此外,在我的例子中,Java 使用 JNI 调用了 C dll,我需要从 C 回调该 JVM。
这是我的代码的一部分:
JAVA:
public class HelloJNI {
static {
// hello.dll on Windows or libhello.so on Linux
System.loadLibrary("hello");
}
// native method for call C dll
private native String getHello(int jvmProcessId);
public String doHello(){
return getHello(myProcessId);
}
}
C:
#include "hellojni_actions_HelloJNI.h"
void invoke_class(JNIEnv* env) {
// HERE I NEED TO CALL A METHOD OF JAVA CLASS WHICH LOADED ME (HelloJNI.java) IN THE SAME JVM
}
JNIEXPORT jstring JNICALL Java_hellojni_actions_HelloJNI_getHello
(JNIEnv *env, jobject thisObj, jint jvmProcessId){
invoke_class(env);
return (*env)->NewStringUTF(env, "Testing...");
}
【问题讨论】:
-
不清楚您在问什么,因为您显示的代码似乎暗示 C DLL 已加载到 JVM 进程中。无论如何,你可以阅读stackoverflow.com/questions/22441878/…
-
我同意,重读后请说明您的本机代码是否已加载到 JVM 中,或者您是否尝试将本机代码“注入”到已运行的 VM 中。
标签: java c eclipse jvm java-native-interface