Я пытаюсь использовать переменную, которая содержит указатель на функцию.Указатель загружается из функции JNI_OnLoad с помощью dlsym
и ее вызова, но в итоге я получил NULL POINTER DEREFERENCE
, который показывает, что мой SendCode
равен NULL
внутри любой функции JNI (кроме JNI_OnLoad).
Я попытался снова инициировать SendCode
в функции jni с глобальным указателем dlopen
, но сам глобальный указатель dlopen
всегда равен NULL из-за этой проблемы.Я также попытался проверить, не является ли SendCode
ненулевым в функции jni, но он делает SendCode
никогда не вызываемым, потому что он всегда равен нулю.
void(*SendCode)(int code);
extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) {
JNIEnv* env;
vm->GetEnv((void**)&env, JNI_VERSION_1_4);
void* handle = dlopen("libapi.so", RTLD_NOW | RTLD_GLOBAL);
if(handle != NULL)
{
SendCode = (void(*)(int))dlsym(handle, "SendCode");
if(SendCode == NULL)
{
ALOGI("Error: SendCode is NULL!");
}
}
return JNI_VERSION_1_4;
}
JNIEXPORT void JNICALL Java_com_myapp_MainActivity_onSendCode(JNIEnv*, jclass, jint code)
{
SendCode(code);
}