Название: как передавать QString по dbus? :) Отправлено: Alex Custov от Март 08, 2009, 22:45 Столкнулся с тем, что при передаче QString-ов по dbus, они теряют свойство isNull(). Например:
Сервер: Код: void DBusAdaptor::setString(const QStrign &s) Клиент: Код: QDBusInterface i("com.test.test", Это нормально? :) Если ли способы это обойти кроме созданий своих обёрток вокруг QString? А то ведь надо будет городить структуру, в которой одно поле QString, второе поле - булевский параметр isNull :D P.S. Qt 4.4.3, Debian Lenny. Название: Re: как передавать QString по dbus? :) Отправлено: BRE от Март 08, 2009, 22:47 Столкнулся с тем, что при передаче QString-ов по dbus, они теряют свойство isNull(). Например: Может проверять isEmpty() и не городить огород? ;)Сервер: Код: void DBusAdaptor::setString(const QStrign &s) Клиент: Код: QDBusInterface i("com.test.test", Это нормально? :) Если ли способы это обойти кроме созданий своих обёрток вокруг QString? А то ведь надо будет городить структуру, в которой одно поле QString, второе поле - булевский параметр isNull :D P.S. Qt 4.4.3, Debian Lenny. А вообще это нормально. Смотри: dbus SideA -------------> SideB Сторона А отправляет null-строку, она преобразуется к dbus-типу строка (""), а на строне B, соответственно преобразуется к пустрой (но не null) строку. Название: Re: как передавать QString по dbus? :) Отправлено: Alex Custov от Март 08, 2009, 23:20 На моей серверной стороне есть разница между isEmpty() и isNull() из-за специфики выполняемой задачи, поэтому потеря свойства isNull() для меня оказалось неожиданностью :) Посмотрел исходники dbus в Qt - да, QString передаётся не как структура, а как char массив.
Цитировать А вообще это нормально. Это не нормально, QString-и надо сериализовать как структуры, а не как const char*. Ладно, видимо надо городить огород :) Название: Re: как передавать QString по dbus? :) Отправлено: BRE от Март 08, 2009, 23:37 Это не нормально, QString-и надо сериализовать как структуры, а не как const char*. DBus это не модуль Qt, это технология межпроцессного взаимодействия.Ладно, видимо надо городить огород :) Ты пишешь клиент, который будет через dbus предоставлять свой сервис клиентам. Эти клиенты не обязательно будут написаны с использованием Qt. Кто-то может захотель использовать эти сервисы из bash-скриптов, как они будут сериализовать строки как структуры, накой им это? И это только из-за того, что ты разработчик решил, что тебе так удобней. У Dbus есть свои типы, и даже если он предоставялет передачу структур, мне кажется, что этим нужно пользоваться как можно реже. Все это IMHO. ;) Название: Re: как передавать QString по dbus? :) Отправлено: Winstrol от Март 09, 2009, 13:26 Это не нормально, QString-и надо сериализовать как структуры, а не как const char*. Может еще capacity тоже сериализовывать надо? Чепуху не говорите. Исправляйте ваш некорректный алгоритм на серверной стороне.Название: Re: как передавать QString по dbus? :) Отправлено: Alex Custov от Март 09, 2009, 15:35 почему ты решил что алгоритм некорректный? :-\ Алгоритм корректный, QString пришлось только в свою структуру обернуть.
Название: Re: как передавать QString по dbus? :) Отправлено: Mixolap от Март 09, 2009, 15:56 А чисто из интереса, что за задача такая, что нельзя isEmpty обойтись?
Название: Re: как передавать QString по dbus? :) Отправлено: Alex Custov от Март 09, 2009, 16:40 т.к. в моей задаче (что-то типа фонт-енда для wpa_supplicant) есть разница между пустой строкой и отсутствием строки. Если я принимаю на стороне сервера строку с isNull() == true, то считается что этого параметра нет и строка не используется вообще. Иначе она используется даже если isEmpty() == true.
То есть получить на сервере QString() и QString("") - две большие разницы. Название: Re: как передавать QString по dbus? :) Отправлено: Winstrol от Март 09, 2009, 18:23 почему ты решил что алгоритм некорректный? :-\ Странный вопрос :-\ Я просто знаю, что это так. Так же, как я знаю, что во второй половине IV века до н.э. Александр Македонский совершил поход в Азию. Название: Re: как передавать QString по dbus? :) Отправлено: Alex Custov от Март 09, 2009, 19:55 Странный вопрос :-\ Я просто знаю, что это так. Так же, как я знаю, что во второй половине IV века до н.э. Александр Македонский совершил поход в Азию. Вывод сделанный при недостатке входных данных. "Просто знаю" - это интересно :) Название: Re: как передавать QString по dbus? :) Отправлено: ритт от Март 09, 2009, 20:08 если строка с isNull() не обрабатывается на клиенте, зачем её передавать?
Название: Re: как передавать QString по dbus? :) Отправлено: Alex Custov от Март 09, 2009, 20:46 строки передаются внутри структуры. Пример с setString() - просто пример для демонстрации, как я и написал.
|