Portál AbcLinuxu, 1. listopadu 2025 18:59
Zdravím, začal jsem programovat s technologií D-Bus v Qt a narazil jsem na problém. Postupoval jsem podle http://doc.trolltech.com/qq/qq20-dbus.html
Kód mojeho zvířátka vypadá takto:
class Animal : public QObject
{
Q_OBJECT
public:
Animal() { mood = 0; }
public slots:
void feed(void) {
++mood;
emit moodChanged(mood);
return;
}
void shoutAt(void) {
--mood;
emit moodChanged(mood);
return;
}
int currentMood() const { return mood; }
signals:
void moodChanged(int mood);
private:
int mood;
};
Ve funkci main pak:
QDBusConnection bus = QDBusConnection::sessionBus();
bus.interface()->registerService("Farm");
Animal cat;
bus.registerObject("/animals/Dax", &cat, QDBusConnection::ExportAllSlots);
Nicméně když pak zkouším kočku nakrmit:
QDBusConnection::sessionBus().call(QDBusMessage::createMethodCall("Farm", "/animals/Dax", "", "feed"));
Dostávám chybu:
process 18995: arguments to dbus_message_new_method_call() were incorrect, assertion "destination == NULL || _dbus_check_is_valid_bus_name (destination)" failed in file dbus-message.c line 1073. This is normally a bug in some application using the D-Bus library. QDBusConnection: error: could not send message to service "Farm" path "/animals/Dax" interface "" member "feed"
Co dělám špatně?
Sorry, primo neporadim, ale kdyz trvas na DBusu, zkus se pohrat s FatRat-em, jeho DBus kod je celkem kratky.
Jinak bych spis doporucoval jiny middleware, treba ZeroC Ice, je to multiplatformni a IMHO jasnejsi a mocnejsi nez DBus.
Děkuju za odpověď. DBus jsem volil, protože s ním pracuje aplikace, kterou potřebuju ovládat.
A chybka byla v tom, že název služby musí vždycky obsahovat tečku (pomohl až mailing list D-.Busu)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.