2012-10-05 40 views
1

我有一個.NET應用程序將數據發送到C++應用程序。他們在消息模式下使用命名管道發送數據。在C++端獲取數據我猜我必須執行ReadFile才能將消息放入緩衝區。但是,如果緩衝區太小,我會得到ERROR_MORE_DATA,我應該再次發出ReadFile。自從我做了任何cpp編碼以來,它已經很長時間了,所以我想知道是否有一種最佳實踐方式來進行這種重新分配,然後將所有字節緩衝區重新組合到一個緩衝區中。
我只能想到某種指向緩衝區的指針列表,並且您繼續增加列表直到您完成計算大小分配一個大容量緩衝區並使用memcpy複製所有內容。有沒有更好的方式,任何人都可以想到。使用Win32從命名管道讀取消息

+0

C#端的消息緩衝區有多大?如果它有所不同,是否有一個現實的限制,你可以把它?什麼是阻止你新/ mallocing,比如說,Rx端的1MB緩存/秒? –

+0

是的,這將工作:-) 謝謝 – Rahul

+0

如果你真的想,你可以隨時重新分配它們。除非有一些壓倒一切的原因,否則我不打擾這些東西。一些* BigBuffer結構/類在你的應用程序是不會打破內存銀行:) –

回答

0

爲什麼不從C#端的管道首先傳遞一個包,包含要發送的數據的大小?在C++端使用ReadFile從管道中讀取並根據剛纔從管道收到的大小創建緩衝區。

然後執行另一個ReadFile填充正確大小的緩衝區與實際數據。

因此,C++端的兩個ReadFile,一個獲取數據大小,然後是一個獲取實際數據。在C#端首先發送數據的大小,然後發送實際數據。