Как использовать типы, сгенерированные gdbus-codegen?

Я реализую сервер dbus, и для упрощения я решил использовать gdbus-codegen,

Это привет мир пример а также это хранилище собираются сгенерировать заголовок и исходные файлы. Затем это делается для подключения сигнала к функции:

g_signal_connect (interface,
"handle-hello-world",
G_CALLBACK (on_handle_hello_world), NULL);

Мои вопросы следующие:

  • какова функция GType min_min_bus_gdbus_get_type (void) должен делать? Он объявлен, но не определен в сгенерированных файлах.
  • вместо подключения сигнала к функции обратного вызова (как описано выше), могу ли я как-то использовать struct MinMinBusGDBUSIfaceобъявлено в сгенерированном заголовке?

Любой пример, который я нашел в сети, имеют эти две вещи (*_get_type (void) объявление функции и struct *Iface объявлено в сгенерированном заголовке. Как их использовать?

0

Решение

Поиграв с примером, я наконец-то разобрался с ответами, и как получить доступ к структуре интерфейса, и как ее настроить. Это нигде не найти, и нигде не задокументировано.


Посмотрев в сгенерированный исходный файл, функция GType min_min_bus_gdbus_get_type (void) может быть определено в огромном макросе, но я не уверен в его функциональности и в том, как его использовать.


Есть способ получить доступ к struct MinMinBusGDBUSIface с помощью MIN_MIN_BUS_GDBUS_GET_IFACE макрос (снова в сгенерированном заголовке).

Чтобы установить обратный вызов функции, эта строка в примере:

g_signal_connect (interface,
"handle-hello-world",
G_CALLBACK (on_handle_hello_world), NULL);

можно заменить на:

MinMinBusGDBUSIface* iface = MIN_MIN_BUS_GDBUS_GET_IFACE(interface);
iface->handle_hello_world = &on_handle_hello_world;

и обратный вызов должен быть изменен, чтобы иметь ту же сигнатуру, что и обратный вызов функции:

static gboolean
on_handle_hello_world (MinMinBusGDBUS *interface,
GDBusMethodInvocation *invocation,
const gchar *greeting)
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]