在用于通过“C”访问的代码sample中,env指针的用法如下:

const char *str = (*env)->GetStringUTFChars(env, s, 0);

对于C++,sample进行相同的调用:
const char *str = env->GetStringUTFChars(s, 0);

该文件继续说:



该声明是否意味着C++版本最终将扩展到C版本并具有相同的间接级别?

我没有看过头文件,但是我很困惑。有人可以解释这种差异吗?

最佳答案

问题中引用的解释对此进行了解释。 C++支持内联成员函数之类的东西,但是C不支持。 JNIEnv的C++定义包括C定义不包含的函数定义。 C++定义如下所示:

char const* JNIEnv::GetStringUTFChars(jstring s, jint i)
{
  return (*this)->GetStringUTFChars(this, s, i);
}

在C版本中调用的函数实际上是一个函数指针。本质上,JNIEnv*是vptr,指向带有一堆JNI提供的函数指针的结构。为了方便起见,C++直接在JNIEnv中提供了附加定义,以避免必须重复函数调用的this参数。

10-07 17:47