Я реализую сервер 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
объявлено в сгенерированном заголовке. Как их использовать?
Поиграв с примером, я наконец-то разобрался с ответами, и как получить доступ к структуре интерфейса, и как ее настроить. Это нигде не найти, и нигде не задокументировано.
Посмотрев в сгенерированный исходный файл, функция 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)
Других решений пока нет …