gpt4 book ai didi

Java、JNI 和类声明

转载 作者:行者123 更新时间:2023-12-01 09:06:16 24 4
gpt4 key购买 nike

任何 JNI 专家都可以解释一下以下情况吗,因为我无法解决这个问题。

假设我们有这个类:

public class MyClass {
static {
System.loadLibrary("recorder");
}

private native long function1();
private native void function2();

private void callback() {

}

public static void main(String[] args) throws Exception {
MyClass obj1 = new MyClass();
obj1.function1();
}

}

在 JNI (C) 中:

JNIEXPORT jstring JNICALL function1(JNIEnv *env, jobject object) {
jclass cls = (*env)->GetObjectClass(env, object);
jmethodID mid = (*env)->GetMethodID(env, cls, "callback", "()V");

if (mid != NULL) {
(*env)->CallVoidMethod(env, object, mid);
}
}

这很好用,但是,如果不是

private native long function1();

我声明

private static native long function1();

从 JNI 到 Java 的调用失败,提示找不到 Java 中的函数回调。

谢谢

最佳答案

对于静态 native 方法, native 代码中的第二个参数不应是jobject,而是jclass

但是您应该使用 javah 工具生成 C 头文件,而不是手动编写它们。

关于Java、JNI 和类声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41259317/

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