如何使用 JNI 创建本机 class?
How to create native class using JNI?
我想用构造函数和一个 returns 字符串的方法创建 C++ class。我的问题是:如何使用 C++ 构造函数在 Java 中初始化 "native class" 类型的对象,然后从这个 Java 对象调用本机方法?
Java中没有'native class';我们有 'native methods' 可以是任何 Java class 的一部分。本机方法作为 extern "C"
函数实现。
简而言之,您可以在 Java 中创建两个本机方法,例如createNativeInstance
和 getNativeString
。请注意,您可能需要另一种方法来释放本机实例:
#include <jni.h>
JNIEXPORT
jlong Java_test_createNativeInstance(JNIEnv *, jobject ) {
return reinterpret_cast<jlong>(new CppClass());
}
JNIEXPORT
jstring Java_test_getNativeString(JNIEnv *env, jobject obj, jlong cppClassPtr) {
CppClass* pCppClass = reinterpret_cast<CppClass*>(cppClassPtr);
return env->NewStringUTF(env, pCppClass->getString();
}
JNIEXPORT
void Java_test_releaseNativeInstance(JNIEnv *env, jobject obj, jlong cppClassPtr) {
CppClass* pCppClass = reinterpret_cast<CppClass*>(cppClassPtr);
delete pCppClass;
}
我想用构造函数和一个 returns 字符串的方法创建 C++ class。我的问题是:如何使用 C++ 构造函数在 Java 中初始化 "native class" 类型的对象,然后从这个 Java 对象调用本机方法?
Java中没有'native class';我们有 'native methods' 可以是任何 Java class 的一部分。本机方法作为 extern "C"
函数实现。
简而言之,您可以在 Java 中创建两个本机方法,例如createNativeInstance
和 getNativeString
。请注意,您可能需要另一种方法来释放本机实例:
#include <jni.h>
JNIEXPORT
jlong Java_test_createNativeInstance(JNIEnv *, jobject ) {
return reinterpret_cast<jlong>(new CppClass());
}
JNIEXPORT
jstring Java_test_getNativeString(JNIEnv *env, jobject obj, jlong cppClassPtr) {
CppClass* pCppClass = reinterpret_cast<CppClass*>(cppClassPtr);
return env->NewStringUTF(env, pCppClass->getString();
}
JNIEXPORT
void Java_test_releaseNativeInstance(JNIEnv *env, jobject obj, jlong cppClassPtr) {
CppClass* pCppClass = reinterpret_cast<CppClass*>(cppClassPtr);
delete pCppClass;
}