Отправка указателей на другой процесс с помощью GVariant

В настоящее время я разрабатываю простой браузер с использованием webkit2gtk. В webkit2gtk все связанные с DOM операции выполняются в отдельном процессе, который называется WebProcess.

Я создал GTKWidget в UI Process. Мне нужно передать структуру GTKWidget в WebProcess. Можем ли мы использовать GVariant для этого?

Я прочитал GVariant apis. Я могу отправить строку, целое число и другие основные типы, используя GVariant. Но можем ли мы отправлять объекты с помощью GVariant?

1 ответ

Решение

Итак, мы должны различать ваш заголовок и ваш вопрос.

Сначала ваш заголовок:

Отправка указателей на другой процесс

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

Но можем ли мы отправлять объекты с помощью GVariant?

Как правило, нет. Вы не можете заглянуть внутрь объектов, поэтому они могут содержать указатели. Смотрите мой комментарий выше.

Однако многие объекты фактически работают без указателей, поэтому информации о типе и памяти, принадлежащей объекту, достаточно, чтобы "воссоздать" его на стороне получателя, просто приведя полученную память в форму объекта, который, как вы знаете, является, Однако это очень специфично для объекта.

Возможно, вам понравится читать о сериализации.

Другие вопросы по тегам