2013-03-29 101 views
0

我有兩個程序:程序A(在FORTRAN中)和程序B(在C++中)。他們通過管道相互連接。方案B應直接從程序A的控制檯讀取二進制數據,但由於某種原因,我不能做到這一點:使用ReadFile()函數讀取Windows中的二進制數據

以下是節目B的閱讀部分:

BOOL bSuccess = FALSE; 
LPBYTE File_Data; 
DWORD dwFileSize; 
wFileSize = GetFileSize(V_hChildStd_OUT_Rd, NULL); 
File_Data = new BYTE[dwFileSize+1]; 
bSuccess = ReadFile(V_hChildStd_OUT_Rd, File_Data, dwFileSize, &dwRead, NULL); 
delete [] File_Data; 

注:V_hChildStd_OUT_Rd是一個句柄程序A的輸出。

如果我傳遞一個,兩個或三個數字的整數(例如1或10或100),程序將工作,我可以在File_Data數組中獲取數字。但是對於較大的整數和所有的雙數,File_Data給出的意義較小。請注意,對於所有數字,我的bSuccess爲TRUE!這意味着它可以讀取文件。 你能幫我解決這個問題嗎?謝謝!

+1

由於事先不知道大小,所以不能在管道上使用'GetFileSize'。 –

回答

2

你不能使用GetFileSize()管道,只有文件。要確定有多少數據可用於從管道讀取,請改用PeekNamedPipe()。並注意輸出值,它告訴你實際讀取的字節數,可能少於你請求的字節數。

+0

感謝您的快速回復。我會嘗試PeekNamedPipe()。但即使我將大小指定爲常數,例如雙字節的8個字節,仍然無法讀取雙數字:File_Data = new BYTE [8] – VecTor

+0

@VecTor您確定FORTRAN和C++使用相同的格式爲雙打?這對你的程序來說至關重要。 – john

+0

如果我不使用管道,只需用FORTRAN寫入二進制文件並通過C++從文件中讀取,它就可以正常工作:file.read((char *)&a,sizeof(double));問題是當我使用ReadFile()函數和管道。 – VecTor