使用 GVariant 将指针发送到另一个进程
Sending pointers to another process using GVariant
我目前正在使用 webkit2gtk 开发一个简单的浏览器。在 webkit2gtk 中,所有 DOM 相关操作都在名为 WebProcess 的单独进程中完成。
我在 UI 进程中创建了一个 GTKWidget。我需要将 GTKWidget 结构传递给 WebProcess。我们可以使用 GVariant 吗?
我已经阅读了 GVariant api。我可以使用 GVariant 发送字符串、整数和其他基本类型。但是我们可以使用 GVariant 发送对象吗?
因此,我们必须区分您的标题和问题。
首先是你的头衔:
Sending pointers to another process
是的,你可以这样做(指针通常可以转换为整数类型),但指针总是特定于一个进程的内存——接收进程无法访问它,所以指针显示为虚无(你遇到了分段错误),或者更糟的是,其他原因(你的程序运行时使用了错误的数据)。
But can we send objects using GVariant?
一般不会。您无法查看 object 的内部,因此它们可能包含指针。请参阅我上面的评论。
然而,许多 object 实际上不需要指针就可以工作,因此属于 object 的类型信息和内存足以在接收方 "recreate" 它,只需将收到的内存转换为 object 的形状即可。不过,那是很object-specific.
您可能会喜欢阅读有关序列化的内容。
我目前正在使用 webkit2gtk 开发一个简单的浏览器。在 webkit2gtk 中,所有 DOM 相关操作都在名为 WebProcess 的单独进程中完成。
我在 UI 进程中创建了一个 GTKWidget。我需要将 GTKWidget 结构传递给 WebProcess。我们可以使用 GVariant 吗?
我已经阅读了 GVariant api。我可以使用 GVariant 发送字符串、整数和其他基本类型。但是我们可以使用 GVariant 发送对象吗?
因此,我们必须区分您的标题和问题。
首先是你的头衔:
Sending pointers to another process
是的,你可以这样做(指针通常可以转换为整数类型),但指针总是特定于一个进程的内存——接收进程无法访问它,所以指针显示为虚无(你遇到了分段错误),或者更糟的是,其他原因(你的程序运行时使用了错误的数据)。
But can we send objects using GVariant?
一般不会。您无法查看 object 的内部,因此它们可能包含指针。请参阅我上面的评论。
然而,许多 object 实际上不需要指针就可以工作,因此属于 object 的类型信息和内存足以在接收方 "recreate" 它,只需将收到的内存转换为 object 的形状即可。不过,那是很object-specific.
您可能会喜欢阅读有关序列化的内容。