C将结构传递给回调函数(Tizen)



我正在为Tizen(智能手表)编写一个应用程序。无法将结构传递给回调。我的typedef:

typedef struct _Health {
...;
const char *data;
} health_s;

声明一个结构并初始化它:

health_s health = {
...,
.data = "steps"
};

将其传递给函数:

_app_check_and_request_permission("http://tizen.org/privilege/healthinfo", &health);

获取并检查结构地址是否通过:

void _app_check_and_request_permission(const char *privilege, void *user_data)
{
health_s *p_health = user_data;
dlog_print(DLOG_INFO, LOG_TAG, "Health data: %s", p_health->data);
...

我在日志中看到";健康数据:步骤";。通过得很好。然后我试图将user_data传递给回调函数

...
ppm_request_permission(privilege, _app_request_response_cb, p_health);
}

来自Tizen文档中的功能描述:

...
* @param[in]   user_data   User specific data which will be passed to
*                          the given callback.
int ppm_request_permission(const char *privilege,
ppm_request_response_cb callback,
void *user_data);

回调声明:

static void _app_request_response_cb(ppm_call_cause_e cause, ppm_request_result_e result,
const char *privilege, void *user_data);

在回调中,我得到了健康数据:NULL。尝试通过p_health->数据到回调,这没关系。问题是传递整个结构。我做错了什么?谢谢更新:在_app_check_and_request_permission函数和回调中检查了传递结构的地址,它们是相同的。但是回调中的结构仍然为空。。。

在系统完成请求时调用_app_request_response_cb之前,health的生存期可能已经结束。例如,如果所示的health定义包含在请求完成之前返回的函数中,则会出现这种情况。简单的补救措施:用存储类static定义health

最新更新