|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2015-11-23 15:55:14
|
显示全部楼层
不大明白您的意思
我的代码是这样写的 但是这样会出现段错误 在dbus_message_iter_append_fixed_array这个位置
- DBusMessageIter datatoSendIter; // DBus数据迭代器
- DBusMessageIter subStructIter;
- dbus_bool_t boolArg = true; // 要传送的bool变量
- char strArg[] = "I am a string"; // 要传送的字符串
- DBusMessageIter subArrayIter;
- int buf[11];
- char tmp[2];
- tmp[0] = DBUS_TYPE_INT16;
- tmp[1] = '\0';
- int i;
- int len = 11;
- for(i = 0; i < len - 1; i++)
- {
- buf[i] = i + 1;
- }
- buf[i] = '\0';
- printf_data_as_hex(buf, len);
- dbus_message_iter_init_append(dbmsg, &datatoSendIter); // 将迭代器绑定至消息
- dbus_message_iter_open_container(&datatoSendIter, DBUS_TYPE_STRUCT, NULL, &subStructIter);
- dbus_message_iter_append_basic(&subStructIter, DBUS_TYPE_BOOLEAN, &boolArg); // 将bool变量append为第一个
- char *buff = strArg; // 对于一些编译器,声名为char strArg[]的strArg无法通过DBus,故需要这一步
- dbus_message_iter_append_basic(&subStructIter, DBUS_TYPE_STRING, &buff);
- // 将字符串append为第二个 由于数组不是基本类型,无法用*_append_basic函数来append,需开启新的子迭代
- dbus_message_iter_open_container(&subStructIter, DBUS_TYPE_ARRAY, tmp, &subArrayIter);
- dbus_message_iter_append_fixed_array(&subArrayIter, DBUS_TYPE_INT16, &buf, len);
- //最后要关闭子迭代,实际上是将子迭代的数据加载到了父迭代器上
- dbus_message_iter_close_container(&subStructIter, &subArrayIter);
- dbus_message_iter_close_container(&datatoSendIter, &subStructIter);
- dbus_connection_send (dbconn, dbmsg, NULL);
复制代码 |
|