Отправка указателей на другой процесс с помощью GVariant
В настоящее время я разрабатываю простой браузер с использованием webkit2gtk. В webkit2gtk все связанные с DOM операции выполняются в отдельном процессе, который называется WebProcess.
Я создал GTKWidget в UI Process. Мне нужно передать структуру GTKWidget в WebProcess. Можем ли мы использовать GVariant для этого?
Я прочитал GVariant apis. Я могу отправить строку, целое число и другие основные типы, используя GVariant. Но можем ли мы отправлять объекты с помощью GVariant?
1 ответ
Итак, мы должны различать ваш заголовок и ваш вопрос.
Сначала ваш заголовок:
Отправка указателей на другой процесс
да, вы можете сделать это (указатели обычно конвертируются в целочисленный тип), но указатели всегда специфичны для памяти процесса - процесс-получатель не имеет к этому доступа, поэтому указатель показывает в ничто (вы получаете ошибку сегментации) или, что еще хуже, к чему-то другому (ваша программа работает с неверными данными).
Но можем ли мы отправлять объекты с помощью GVariant?
Как правило, нет. Вы не можете заглянуть внутрь объектов, поэтому они могут содержать указатели. Смотрите мой комментарий выше.
Однако многие объекты фактически работают без указателей, поэтому информации о типе и памяти, принадлежащей объекту, достаточно, чтобы "воссоздать" его на стороне получателя, просто приведя полученную память в форму объекта, который, как вы знаете, является, Однако это очень специфично для объекта.
Возможно, вам понравится читать о сериализации.