使用Win32从命名管道中读取消息

时间:2012-10-05 11:41:00

标签: winapi named-pipes

我有一个.NET应用程序将数据发送到C ++应用程序。他们在消息模式下使用命名管道来发送数据。在C ++端获取数据我猜我必须做一个ReadFile来将消息放入缓冲区。但是如果缓冲区太小,我将得到ERROR_MORE_DATA,我应该再次发出一个ReadFile。自从我完成任何cpp编码以来已经很长时间了,所以我想知道是否有一种最佳实践方法来进行这种重新分配,然后将所有字节缓冲区重新组装到一个缓冲区中。
我只能想到某种缓冲区指针列表,你继续增长列表,直到你完成计算大小分配一个大块缓冲区并使用memcpy复制所有内容。有没有人能想到的更好的方式。

1 个答案:

答案 0 :(得分:0)

为什么不首先从C#端传递数据包,包含要发送的数据的大小?在C ++端,使用ReadFile从管道中读取它,并根据刚从管道接收的大小创建缓冲区。

然后用另外的ReadFile用实际数据填充正确大小的缓冲区。

因此,C ++方面有两个ReadFiles,一个用于获取数据的大小,后跟一个获取实际数据。在C#端首先发送数据大小,然后发送实际数据。