微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决C 将结构传递给回调函数 (Tizen)

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

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->data 传递给回调,没关系。问题在于传递整个结构。 我究竟做错了什么?谢谢。 更新: 在_app_check_and_request_permission 函数和回调中检查了传递结构的地址,它们是相同的。但是回调里面的struct还是空的...

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?