gpt4 book ai didi

android - 从 Android 核心中解开一些 JNI C++ 代码

转载 作者:行者123 更新时间:2023-11-30 04:33:36 24 4
gpt4 key购买 nike

我在 C++ 和 JNI 方面不是很有经验,所以我在处理这段代码的某些部分时遇到了真正的麻烦(这是 Android 框架的一部分,更准确地说来自 Surface 类的 CPP 源):

static void Surface_unlockCanvasAndPost(
JNIEnv* env, jobject clazz, jobject argCanvas)
{
jobject canvas = env->GetObjectField(clazz, so.canvas);
if (canvas != argCanvas) {
doThrow(env, "java/lang/IllegalArgumentException", NULL);
return;
}

const sp<Surface>& surface(getSurface(env, clazz));
if (!Surface::isValid(surface))
return;

// detach the canvas from the surface
SkCanvas* nativeCanvas =
(SkCanvas*) env->GetIntField(canvas, no.native_canvas);
int saveCount = env->GetIntField(clazz, so.saveCount);
nativeCanvas->restoreToCount(saveCount);
nativeCanvas->setBitmapDevice(SkBitmap());
env->SetIntField(clazz, so.saveCount, 0);

// unlock surface
status_t err = surface->unlockAndPost();
if (err < 0) {
doThrow(env, "java/lang/IllegalArgumentException", NULL);
}
}

特别困扰我的是:

const sp<Surface>& surface(getSurface(env, clazz));

这让我很困惑。没有等号,这些模板使其更难理解。

有人可以帮我写出这行代码吗?

最佳答案

这是引用的构造函数调用语法 - 像这样写有点混淆,比如写 int i(23);而不是 int i = 23; , 但它真的等同于写作 const sp<Surface>& surface = getSurface(env, clazz); .

关于android - 从 Android 核心中解开一些 JNI C++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6704982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com