Portál AbcLinuxu, 7. května 2025 19:46
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.