搜索 JNI,我总能找到类似的东西:
- C/C++方法,Java调用
- Java方法,C/C++调用
但从不在 C/C++ 中调用方法,在 C/C++ 中使用 JNI 调用。
我问那个,因为我有一个第 3 方 Java 库,其中有一些 C/C++ 库,而且我一直使用 Java 来调用它们。我现在想用 C 而不是 Java 创建一些程序。不幸的是,他们不提供 C/C++ 中的任何 API,仅提供 Java 中的 API。
是否可能,如果可以,我该如何尝试?
提前致谢!
最佳答案
JNI 方法始终使用外部 C 签名公开。
这意味着如果您有方法签名,您可以直接链接到 JNI dll。 (如果您查看 Java 类 native 方法签名,您可以轻松获得)。
但是您必须确保为方法提供它期望的环境。
这意味着传递“this”对象和环境对象。
您必须确保类加载器对象中加载了正确的包。在大多数情况下,JNI 代码假定调用方法的环境中已经有正确的类加载器(因为调用了 java 方法...)。
而且 JNI 代码可能会认为本地引用会自动从堆栈中释放(这在 C++ native 线程中不会发生)。
无论如何,它看起来像这样:
//MyClass.java
class MyClass
{
native void Blah();
}
//method signature, some header file:
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL Java_MyClass_Blah
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
//Call the function, C++ code
Java_MyClass_Blah(myEnv, myClassInstanve);
关于c++ - JNI如何在C/C++中调用C/C++函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30870581/