JNI jni/cyberlevel9.c:17:31:错误:请求成员'NewDirectByteBuffer'的东西不是结构或联合

1 c c++ eclipse java-native-interface android

当我尝试构建时Eclipse给出了这个错误:

jni/cyberlevel9.c:17:31: error: request for member 'NewDirectByteBuffer' in something  not a structure or union
jni/cyberlevel9.c:18:28: error: request for member 'NewGlobalRef' in something not a structure or union
Run Code Online (Sandbox Code Playgroud)

这是代码的问题部分:

JNIEXPORT jobject JNICALL Java_com_cyberbg_natcamlevel9_NativeCameraLevel9Start_allocNativeBuffer(JNIEnv* env, jobject this, jlong size)
{
void* buffer = malloc(size);
jobject directBuffer = env->NewDirectByteBuffer(buffer, size);
jobject globalRef = env->NewGlobalRef(directBuffer);

return globalRef;
//return (NewDirectByteBuffer*)(*env)->NewDirectByteBuffer(buffer, size);
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*ohn 6

JNI调用来自C程序的样子

(*env)->fun(env, p1, ...)
Run Code Online (Sandbox Code Playgroud)

您的调用样式在C++中是可以的,其中定义了一个特殊的包装类jni.h:

env->fun(p1, ...)
Run Code Online (Sandbox Code Playgroud)

您可以通过简单地重命名jni/cybrrlevel9.c来解决您的问题jni/cyberlevel9.cpp

要么,

jobject directBuffer = (*env)->NewDirectByteBuffer(env, buffer, size); 
jobject globalRef = (*env)->NewGlobalRef(env, directBuffer);
Run Code Online (Sandbox Code Playgroud)