0

我目前正在使用 Vala 编写一个应用程序,该应用程序需要我通过网络发送数据。为了帮助创建数据包(并在以后更新协议),我创建了结构,我将其作为 void* 传递给方法。这些结构代表了数据包的排列方式,让我可以非常轻松地生成要发送的数据包,而不必过多地乱搞。然而,问题在于 GLib.OutputStream.write() 的 Vala 包装器不接受计数(即使原始方法接受)。Vala 获取传递给它的 uint8[] 的大小并将其提供给原始方法。有没有一种简单的方法来解决这个问题,无需编辑 GIO vapi?在提供尺寸的同时将 void* 投射到 uint8[] 可能是一种非常便宜的方法?一世' m 这里的目标是非常高的性能,因为应用程序需要同时维护数千个连接。提前感谢您的帮助。

〜迈克尔

4

2 回答 2

1

我一直在使用这样的宏:

#define OBJECT_TO_BUFFER(val,type,size) (*(size) = sizeof(type), (guint8*)val)

为了解决这个问题。它接受您的对象并简单地返回与uint8[]. 它在 Vala 中有相应的原型:

unowned uint8[] Buffer.of<T>(ref T @value);

名为“tricks”的头文件和 VAPI 文件位于我的 GitHub中。处理对象数组有类似的版本。

于 2012-03-26T15:25:41.937 回答
1
unowned uint8[] buf = (uint8[]) your_real_buffer;
buf.length = the_length_you_want;

然后发送buf。

于 2012-04-08T17:02:41.823 回答