我正在尝试将此结构的数组发送到DBus服务器:
typedef struct
{
guint arg1;
guchar msg[DTC_ACTION_PATH_LENGTH];
} DTC_ErrorMessage;
这是我正在处理的功能:
gint fillMessage(GPtrArray **msg, DTC_ErrorMessage *data)
{
g_assert(NULL != msg);
g_assert(NULL == *msg);
g_assert(NULL != data);
*msg = g_ptr_array_new();
g_assert(NULL != *msg);
GValueArray *container = g_value_array_new(2); // struct of 2 elements
GValue v;
memset(&v, 0, sizeof(GValue));
// Insert first element of the struct
g_value_init(&v, G_TYPE_INT);
g_value_set_int(&v, data->arg1);
g_value_array_append(container, &v);
g_value_unset(&v);
// Add code here for the second element of the struct
g_ptr_array_add(*msg, (gpointer) container);
return 0;
}
问题是:
答案 0 :(得分:0)
此解决方案似乎有效:
gint fillMessage(GPtrArray **msg, DTC_ErrorMessage *data)
{
g_assert(NULL != msg);
g_assert(NULL == *msg);
g_assert(NULL != data);
*msg = g_ptr_array_new();
g_assert(NULL != *msg);
GValueArray *vals;
GArray *garray;
vals = g_value_array_new(2);
g_value_array_append(vals, NULL);
g_value_init(g_value_array_get_nth(vals, 0), G_TYPE_UINT);
g_value_set_uint(g_value_array_get_nth(vals, 0), data->arg1);
garray = g_array_new(FALSE, TRUE, sizeof(guchar));
gint i;
for(i = 0; i < DTC_ACTION_PATH_LENGTH; i++)
{
g_array_append_val(garray, data->msg[i]);
}
g_value_array_append(vals, NULL);
g_value_init (g_value_array_get_nth(vals, 1), dbus_g_type_get_collection ("GArray", G_TYPE_UCHAR));
g_value_take_boxed (g_value_array_get_nth(vals, 1), garray);
g_ptr_array_add(*msg, vals);
return 0;
}
任何更好的解决方案都将不胜感激!