gpt4 book ai didi

android - 在 Android 上使用 JNI 使用上下文指针调用函数会导致段错误

转载 作者:行者123 更新时间:2023-11-28 05:51:59 25 4
gpt4 key购买 nike

我在 example tango projects 之一中找到了这段代码使用 JNI,我不知道上下文是什么,也不知道如何使用它。示例代码有效,但我的代码无效。

void OnXYZijAvailableRouter(void *context, const TangoXYZij *xyz_ij) {
SynchronizationApplication *app =
static_cast<SynchronizationApplication *>(context);
app->OnXYZijAvailable(xyz_ij);
}

我尝试在下面模仿它:

void OnFrameAvailableRouter(void *context, const TangoCameraId id,
const TangoImageBuffer *buffer) {
SynchronizationApplication *app =
static_cast<SynchronizationApplication *>(context);
LOGE("Before onframe call.");
app->onFrameAvailable(id, buffer);
LOGE("After onframe call.");
}

但是,当我尝试运行它时,我得到了这个输出:

Before onframe call.
Fatal signal 11 (SIGSEGV) at 0x00000308 (code=1), thread 15673 (Binder_2)

现在我设法找到了导致段错误的指针,但我不知道为什么它不起作用。

当然,我可能做错了什么,但我不知道是什么,因为我复制了示例中的代码。

int SynchronizationApplication::TangoConnectCallbacks() {
TangoErrorType depth_ret =
TangoService_connectOnXYZijAvailable(OnXYZijAvailableRouter);

depth_ret = TangoService_connectOnFrameAvailable(TangoCameraId::TANGO_CAMERA_COLOR, NULL,
OnFrameAvailableRouter);

return depth_ret;
}

我从路由器调用的函数。

void OnXYZijAvailable(const TangoXYZij *xyz_ij);
void onFrameAvailable(const TangoCameraId id, const TangoImageBuffer *buffer);

上下文到底是什么?我已经阅读了一些解释,但我仍然不明白为什么我可以在上面的例子中使用上下文调用函数,也不明白为什么我需要路由器函数。我读过this SO answerthe android page关于这个概念,但我看不到上下文和我的类(class)之间的联系。

最佳答案

OnXYZijAvailableRouter(深度回调)中,上下文是从TangoService_connect函数传入的实例。我相信在应用程序类中,应该有这样一行: TangoService_connect(this, tango_config_); 所以 this 成为调用回调时的上下文。此上下文也适用于姿势和事件回调。

对于 OnFrameAvailableRouter,上下文是您在 TangoService_connectOnFrameAvailable 中传入的实例。在这种情况下,代码将 NULL 设置为上下文,但在回调中,它尝试在 NULL 上调用函数。这就是崩溃点。

我相信如果您将它更改为 TangoService_connectOnFrameAvailable(TangoCameraId::TANGO_CAMERA_COLOR, this, OnFrameAvailableRouter); 它应该可以正常工作。

路由器函数用于回调,我还没有找到将实例的函数指针提供给 API 的方法。但是,如果您找到了这样做的方法,请告诉我,我也想知道..

关于android - 在 Android 上使用 JNI 使用上下文指针调用函数会导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35044093/

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