GLib
  • Initial page
  • I. Концепция
    • Background
    • Типы данных и программирование
  • Динамическая система типов Glib
    • Введение
    • Функции копирования
    • Соглашения
    • Неинстанциируемые не классифицированные базовые типы
    • Инстанциируемые классифицируемые типы: объекты
    • Неинстанциированные классифицированные типы: Интерфейсы.
  • Основной класс GObject
    • Введение
    • Инстанциация объекта
    • Объектное управление памятью
    • Свойства объекта
  • Система сообщений GObject
    • Замыкания
    • Сигналы
  • II. Описание API
    • GType
    • GTypePlugin
    • GTypeModule
    • GObject часть 1
    • GObject часть 2
    • Enums and Flags
    • GBoxed
    • Generic Values
    • Parameters and Values часть 1
    • Parameters and Values часть 2
    • Parameters and Values часть 3, ага
    • Value arrays
  • III. Описание инструментов
    • glib-mkenums
    • glib-genmarshal
    • gobject-query
  • IV. Руководство
    • Как определить и реализовать новый GObject?
    • Объектные методы
    • Как определять и реализовывать Интерфейсы?
    • Как создавать и использовать сигналы
    • Как пользователи могут злоупотреблять сигналами (и почему некоторые думают что это хорошо)
  • V. Об инструментах
    • Об инструментах
  • GTK 4
    • GtkApplication и GtkApplicationWindow
    • Widgets
Powered by GitBook
On this page
  • Краткое описание
  • Иерархия объектов
  • Известные реализации
  • Описание
  • Детали
  • Смотрите также

Was this helpful?

  1. II. Описание API

GTypePlugin

GTypePlugin — Интерфейс для динамически загружаемых типов

Краткое описание


#include <glib-object.h>


                    GTypePlugin;
                    GTypePluginClass;
void                (*GTypePluginUse)                   (GTypePlugin *plugin);
void                (*GTypePluginUnuse)                 (GTypePlugin *plugin);
void                (*GTypePluginCompleteTypeInfo)      (GTypePlugin *plugin,
                                                         GType g_type,
                                                         GTypeInfo *info,
                                                         GTypeValueTable *value_table);
void                (*GTypePluginCompleteInterfaceInfo) (GTypePlugin *plugin,
                                                         GType instance_type,
                                                         GType interface_type,
                                                         GInterfaceInfo *info);
void                g_type_plugin_use                   (GTypePlugin *plugin);
void                g_type_plugin_unuse                 (GTypePlugin *plugin);
void                g_type_plugin_complete_type_info    (GTypePlugin *plugin,
                                                         GType g_type,
                                                         GTypeInfo *info,
                                                         GTypeValueTable *value_table);
void                g_type_plugin_complete_interface_info
                                                        (GTypePlugin *plugin,
                                                         GType instance_type,
                                                         GType interface_type,
                                                         GInterfaceInfo *info);

Иерархия объектов


  GInterface
   +----GTypePlugin

Известные реализации

Описание

  1. Цикл может повторятся от второго шага.

Детали

GTypePlugin

typedef struct _GTypePlugin GTypePlugin;

Декларация типа GTypePlugin используется как метка для объектов которые реализуют интерфейс GTypePlugin.

GTypePluginClass

typedef struct {
  GTypePluginUse		   use_plugin;
  GTypePluginUnuse		   unuse_plugin;
  GTypePluginCompleteTypeInfo	   complete_type_info;
  GTypePluginCompleteInterfaceInfo complete_interface_info;
} GTypePluginClass;

Увеличивает количество используемых plugin.

Уменьшает количество используемых plugin.

GTypePluginUse ()

void                (*GTypePluginUse)                   (GTypePlugin *plugin);

plugin :

GTypePluginUnuse ()

void                (*GTypePluginUnuse)                 (GTypePlugin *plugin);

plugin :

GTypePluginCompleteTypeInfo ()

void                (*GTypePluginCompleteTypeInfo)      (GTypePlugin *plugin,
                                                         GType g_type,
                                                         GTypeInfo *info,
                                                         GTypeValueTable *value_table);

plugin :

g_type :

info :

value_table :

GTypePluginCompleteInterfaceInfo ()

void                (*GTypePluginCompleteInterfaceInfo) (GTypePlugin *plugin,
                                                         GType instance_type,
                                                         GType interface_type,
                                                         GInterfaceInfo *info);

plugin :

instance_type :

interface_type :

info :

g_type_plugin_use ()

void                g_type_plugin_use                   (GTypePlugin *plugin);

plugin :

g_type_plugin_unuse ()

void                g_type_plugin_unuse                 (GTypePlugin *plugin);

plugin :

g_type_plugin_complete_type_info ()

void                g_type_plugin_complete_type_info    (GTypePlugin *plugin,
                                                         GType g_type,
                                                         GTypeInfo *info,
                                                         GTypeValueTable *value_table);

plugin :

g_type :

info :

value_table :

g_type_plugin_complete_interface_info ()

void                g_type_plugin_complete_interface_info
                                                        (GTypePlugin *plugin,
                                                         GType instance_type,
                                                         GType interface_type,
                                                         GInterfaceInfo *info);

plugin :

instance_type :

interface_type :

info :

Смотрите также

PreviousGTypeNextGTypeModule

Last updated 4 years ago

Was this helpful?

GTypePlugin реализует .

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

Сначала тип внедряется (обычно после загрузки модуля в первый раз, или вашим основным приложением, которое знает какие модули внедряют какие типы), например:new_type_id = g_type_register_dynamic (parent_type_id, "TypeName", new_type_plugin, type_flags); где new_type_plugin это реализация интерфейса.

На реализованный тип создаётся ссылка, например через или через (вызывается функцией ) или как описано выше выполняя наследование типа из new_type_id.

Это заставит систему типов загрузить реализацию типа вызвав и для new_type_plugin.

В некоторой точке реализация типа больше не требуется, например после или (вызывается когда количество ссылок экземпляра сброшено до нуля).

Это заставит систему типов сбросить информацию найденную с помощью и зтем вызвать дляnew_type_plugin.

В основном вы должны реализовать тип который несёт use_count, как только use_count станет единицей, вы должны загрузить реализацию для успешной обработки наступающего вызова . Позже, возможно после последующих использованных/неиспользованных вызовов, как только use_count сброшен до 0, вы можете выгрузить реализацию снова. Система типов гарантированно вызовет и снова когда тип потребуется опять.

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

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

use_plugin;

unuse_plugin;

complete_type_info;

Заполняет сструктуры и для типа. Сструктуры инициализируются с помощью memset(s, 0, sizeof (s)) перед вызовом этой функции.

complete_interface_info;

Заполняет недостающие части для интерфейса. Сструктуры инициализируются с помощью memset(s, 0, sizeof (s)) перед вызовом этой функции.

Тип use_plugin функции , которая вызывается для увеличения используемого количества plugin.

чьё используемое количество должно быть увеличено

Тип unuse_plugin функции .

чьё используемое количество должно быть уменьшено

Тип complete_type_info функции .

чья информация заполнена

структура для заполнения

для заполнения

Тип complete_interface_info функции .

инстанциируемого типа к которому добавляется интерфейс

интерфейса чья информация заполнена

для заполнения

Вызывает use_plugin функцию из принадлежащей plugin. Нет необходимости использовать эту функцию вне системы типов GObject непосредственно.

Вызывает unuse_plugin функцию из принадлежащей plugin. Нет необходимости использовать эту функцию вне системы типов GObject непосредственно.

a

Вызывает complete_type_info функцию из принадлежащей plugin. Нет необходимости использовать эту функцию вне системы типов GObject непосредственно.

чья информация заполняется

структура для заполнения

для заполнения

Вызывает complete_interface_info функцию из принадлежащей plugin. Нет необходимости использовать эту функцию вне системы типов GObject непосредственно.

инстанциируемого типа к которому добавляется интерфейс

интерфейса чья информация заполняется

для заполнения

и .

GTypeModule
GTypePlugin
GTypePlugin
g_type_class_ref()
g_type_create_instance()
g_object_new()
g_type_plugin_use()
g_type_plugin_complete_type_info()
g_type_class_unref()
g_type_free_instance()
g_type_plugin_complete_type_info()
g_type_plugin_unuse()
GTypePlugin
g_type_plugin_complete_type_info()
g_type_plugin_use()
g_type_plugin_complete_type_info()
GTypeModule
GTypePlugin
GTypePlugin
GTypePluginClass
GTypePluginClass
GTypePluginClass
GTypePluginClass
GTypePluginClass
GTypePluginClass
GTypePluginClass
GTypePluginClass
GTypeModule
g_type_register_dynamic()
GTypePluginUse
GTypePluginUnuse
GTypePluginCompleteTypeInfo
GTypeInfo
GTypeValueTable
GTypePluginCompleteInterfaceInfo
GInterfaceInfo
GTypePlugin
GTypePlugin
GTypePlugin
GType
GTypeInfo
GTypeValueTable
GTypePlugin
GType
GType
GInterfaceInfo
GTypePlugin
GTypePlugin
GTypePlugin
GType
GTypeInfo
GTypeValueTable
GTypePlugin
GType
GType
GInterfaceInfo