如何在gdbus emit命令中指定uint8和int16类型的信号参数
如何在gdbus emit命令中指定uint8和int16类型的信号参数
嗨,这个问题的核心是让gdbus放弃默认的类型推断(数字默认会被当成int32),改用显式的类型标注来指定uint8或int16。其实只要用GVariant的类型语法就能搞定,我给你一步步说清楚:
先记两个关键类型标识
GVariant里对应这两种类型的缩写很简单:
- uint8 对应
y(代表byte类型) - int16 对应
n(就是int16的缩写)
怎么在命令里标注类型
在你需要指定类型的数值外面,用 (类型代码 数值) 的格式包裹起来就行。这样gdbus就会严格按照你指定的类型来解析参数,不会再自动用int32了。
修改你的示例命令
你原来的命令里,[{1, 2, 3}] 被当成了int32数组,现在把每个数字替换成带类型标注的形式:
sudo gdbus emit --system --object-path /com/application --signal com.application.example "[{'ThisisString', [{'FirstString', 'NextString', [{(y 1), (n 2), (y 3)}]}]}]"
这里:
(y 1)明确告诉gdbus这是一个uint8类型的1(n 2)指定这是int16类型的2(y 3)同样是uint8类型的3
额外提醒
如果你的DBus信号接口(比如对应的XML描述文件)里已经定义了参数类型,一定要保证你标注的类型和接口定义完全一致,不然可能会出现信号发送失败或者接收端解析错误的情况哦。
备注:内容来源于stack exchange,提问作者Anton Kalistratov
相关产品推荐
相关产品推荐

