DBus-Glib,发送一个带有嵌套结构的信号
DBus Glib, send a signal with a struct nested
我正在linux上用c++语言开发一个应用程序。我想发送这样的信号:
<signal name="EmitSignal">
<arg type="(u(i)uussssu)" name="t_struct_of_signal" direction="out" />
</signal>
type="(u(i)uussssu)"
中的第二个参数是枚举类型。
我正在尝试注册一个结构
#define STRUCT_OF_SIGNAL (dbus_g_type_get_struct ("GValueArray",
G_TYPE_UINT,
G_TYPE_POINTER,
G_TYPE_UINT,
G_TYPE_UINT,
G_TYPE_STRING,
G_TYPE_STRING,
G_TYPE_STRING,
G_TYPE_STRING,
G_TYPE_UINT,
G_TYPE_INVALID))
但我有一些错误:
** (process:21792): WARNING **: No marshaller registered for type "gpointer"
** (process:21792): WARNING **: failed to marshal parameter 1 for signal EmitSignal
有人能帮我吗?
非常感谢
我解决了它:我将G_TYPE_VALUE_ARRAY
更改为dbus_g_type_get_struct ("GValueArray", G_TYPE_UINT, G_TYPE_INVALID)
然后,这是:
g_value_init(g_value_array_get_nth(ret, 0), G_TYPE_VALUE_ARRAY);
现在,它是:
g_value_init(g_value_array_get_nth(ret, 0), dbus_g_type_get_struct ("GValueArray", G_TYPE_UINT, G_TYPE_INVALID));
G_TYPE_VALUE_ARRAY
和GValueArray
结构可能不兼容。
我解决了第一个问题:
#define STRUCT_OF_SIGNAL (dbus_g_type_get_struct ("GValueArray",
G_TYPE_UINT,
dbus_g_type_get_struct ("GValueArray", G_TYPE_UINT, G_TYPE_INVALID),
G_TYPE_UINT,
G_TYPE_UINT,
G_TYPE_STRING,
G_TYPE_STRING,
G_TYPE_STRING,
G_TYPE_STRING,
G_TYPE_UINT,
G_TYPE_INVALID))
信号接口现在是正确的,但当我调用g_signal_emit:时
(process:11052): GLib-GObject-CRITICAL **: g_value_copy: assertion `g_value_type_compatible (G_VALUE_TYPE (src_value), G_VALUE_TYPE (dest_value))' failed
(process:11052): GLib-GObject-CRITICAL **: g_value_array_get_nth: assertion `value_array != NULL' failed
(process:11052): GLib-GObject-CRITICAL **: g_value_copy: assertion `G_IS_VALUE (src_value)' failed
我初始化第二个参数:
g_value_array_prepend(ret, NULL);
g_value_init(g_value_array_get_nth(ret, 0), G_TYPE_VALUE_ARRAY);
GValueArray *l_class = g_value_array_new(1);
g_value_array_prepend(l_class, NULL);
g_value_init(g_value_array_get_nth(l_class, 0), G_TYPE_UINT);
g_value_set_uint(g_value_array_get_nth(l_class, 0), obj->class_id);
g_value_set_boxed(g_value_array_get_nth(ret, 0), l_class);
相关文章:
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 用C#中的并集模拟C++嵌套结构
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- Lambda 捕获、初始值设定项和嵌套结构
- 使用g++静态初始化带有命名标签的嵌套C++结构
- 重载嵌套结构/类的流插入运算符
- C++将结构传递给函数以访问嵌套结构
- C++ 在外部使用嵌套结构实现类函数
- 嵌套结构,从由空行分隔的文件中读取数据
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- 受保护的嵌套结构不能用作派生外部类中的返回类型?
- C++中的嵌套结构
- 使用嵌套结构初始化并集
- C++ 中的嵌套结构函数
- C++中匿名类型的嵌套结构
- c++ 嵌套结构映射找不到成员
- C 嵌套结构上的 g++ 编译错误
- 不能使用嵌套结构中的联合元素作为 scanf() 的参数来存储所需的值
- 如何将值添加到嵌套结构中,该结构在C++中有两个指针