Hi, all. Does anyone have experience trying to pass UInt32 arguments to a DBus service using PyQt4.QtDBus? The program appended below generates the following error:
% python build_connection.py 0 0 0 1234 Call failed: No such method 'buildConnection' in interface 'com.acme.Audio.Connection' at object path '/com/acme/Audio/Connection' (signature '(i)(i)(i)i') I think it's failing because the actual signature of the method to be called is '(i)(i)(i)u' [??] (Don't ask why the designers of this interface wrapped a DBus struct around every int--I have no idea. `:-@) Can anyone confirm whether passing unsigned 32-bit arguments is possible with my version of PyQt4/SIP: >>> import PyQt4.QtCore >>> PyQt4.QtCore.PYQT_VERSION_STR '4.9.3' >>> PyQt4.QtCore.PYQT_VERSION 264451 >>> import sip >>> sip.SIP_VERSION_STR '4.13.3' >>> sip.SIP_VERSION 265475 Is there some way I can coerce the last arg to the right type? -------------------- #!/usr/bin/env python from PyQt4 import QtDBus from PyQt4.QtCore import QCoreApplication if __name__ == '__main__': import sys from os.path import basename if len(sys.argv) != 5: print("Usage: %s <sender> <source> <sink> <connID>" % (basename(sys.argv[0]),)) sys.exit(1) sender = int(sys.argv[1]) source = int(sys.argv[2]) sink = int(sys.argv[3]) conn_id = int(sys.argv[4]) app = QCoreApplication(sys.argv) bus = QtDBus.QDBusConnection.connectToBus( "tcp:host=192.168.0.1,port=6668", "myConnection" ) iface = QtDBus.QDBusInterface( 'com.acme.Audio', '/com/acme/Audio/Connection', 'com.acme.Audio.Connection', bus ) if not iface.isValid(): sys.stderr.write("Invalid interface: %s\n" % bus.lastError().message()) sys.exit(1) sender_ = QtDBus.QDBusArgument() sender_.beginStructure() sender_.add(sender) sender_.endStructure() source_ = QtDBus.QDBusArgument() source_.beginStructure() source_.add(source) source_.endStructure() sink_ = QtDBus.QDBusArgument() sink_.beginStructure() sink_.add(sink) sink_.endStructure() msg = iface.call('buildConnection', sender_, source_, sink_, conn_id) reply = QtDBus.QDBusReply(msg) if not reply.isValid(): sys.stderr.write("Call failed: %s\n" % reply.error().message()) sys.exit(1) #else: #sys.stdout.write("Reply was: %s\n" % reply.value()) _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt