C DBus:调用方法返回字符串时失败

Posted

技术标签:

【中文标题】C DBus:调用方法返回字符串时失败【英文标题】:C DBus : Fails when calling method returning string 【发布时间】:2011-04-14 08:03:07 【问题描述】:

不能请人告诉我为什么下面的代码在执行时会崩溃,(编译正常)它在向左旋转 90 度的 X 环境中。

    DBusGConnection *connection;
    DBusGProxy *proxy;
    GError *error = NULL;
    gchar *name = NULL;

    g_type_init ();

    //Get the connection and ensure the name is not used yet
    connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
    if (connection == NULL) 
            g_warning ("Failed to make connection to system bus: %s",
                            error->message);
            g_error_free (error);
            exit(1);
    

    proxy = dbus_g_proxy_new_for_name (connection,
                    "to.some.Service",
                    "/to/some/Object",
                    "to.some.Interface" );

    dbus_g_proxy_call(proxy, "getStatus", &error, G_TYPE_INVALID, G_TYPE_STRING, &name, G_TYPE_INVALID);
    printf("Name is: %s\n", name);
    return 0;

【问题讨论】:

如果它真的只是在显示器旋转 90 度时崩溃,我很确定它与您调用的确切服务有关。请说明它是什么服务。 该服务由我定义,我认为它工作正常,因为我编写了一个返回正确值的模拟 python 脚本(与上面的脚本相同)。 其实上面的代码在X的第一次启动时运行正常。但是如果显示器的方向旋转则无法正常运行。 被否决,因为问题特定于您的代码,对其他人通常没有用处。 【参考方案1】:

得到答案。实际上该服务是在 Python 中运行的,并且返回的值不是字符串……因为它不是 Python 中的强类型。所以返回 str(status) 但没有状态解决了我的问题。

【讨论】:

以上是关于C DBus:调用方法返回字符串时失败的主要内容,如果未能解决你的问题,请参考以下文章

C中的Dbus结构和方法调用

在发出 dbus-send 命令后,如何使用 C 调用方法?

(安全问题)有啥办法可以隐藏dbus方法调用来监控dbus?

使用 dbus 调用 java 方法

如何通过 dbus-send 发送方法调用?

在gjs中使用GDBus调用DBus方法,没有输出?