24 января 2008

Про DCOP в Ruby

Какой артист погибает!
Нерон


Для тех, кому мало биндингов Ruby для Qt, существуют биндинги для KDE в виде библиотеки Korundum. Вот только в этом мануале не написано, что нужно зарегистрировать клиента DCOP:

1 @dcopclient = KDE::DCOPClient.new
2 @dcopclient.attach
3 @dcopclient.registerAs("my_app_name",false)
4
5 @dcop = KDE::DCOPRef.new("other_app_name","object_identity")
6 @dcop.setDCOPClient(@dcopclient)


И точно помню, что я с этим не сталкивался в пору кодирования под КДЕ на C++ ... Как-то это для меня неожиданностью стало. В те милые сердцу времена я так и писал:

1 DCOPRef m_amarokplayer("amarok","player");
2 DCOPReply r=m_amarokplayer.call("status()");


Сейчас же без инициализации клиента получаю
DCOPRef::call(): no DCOP client or client not attached error
Но это ещё преодолимо. Есть ещё одно большое и неприятное НО - через DCOP интерфейс в руби передаются урезанные до 7 бит строки. Довольно просто это проверить с помощью Klipper:

1 @dcop = KDE::DCOPRef.new("klipper","klipper")
2 @dcop.call("setClipboardContents","строка")


Обидно.

2 комментария:

sHaggY_caT комментирует...

Привет!
А можно несколько глупых вопросов по DCOP/Dbus?

PhoeniX комментирует...

По DCOP можно, dbus я не трогал за отсутствием нужды в этом.