0

プログラム A (FORTRAN) とプログラム B (C++) の 2 つのプログラムがあります。それらは互いにパイプを介して接続されています。プログラム B は、プログラム A のコンソールからバイナリ データを直接読み取る必要がありますが、何らかの理由でそれができません。

以下は、プログラム 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、2、または 3 桁の整数 (たとえば、1、10、または 100) を渡すと、プログラムが動作し、File_Data 配列で数値を取得できます。ただし、より大きな整数値とすべての倍精度数の場合、File_Data は意味のある値を提供しません。すべての数値について、私の bSuccess は TRUE であることに注意してください! つまり、ファイルを読み取ることができます。問題を解決するのを手伝ってくれませんか。ありがとう!

4

1 に答える 1

2

GetFileSize()ファイルのみで、パイプでは使用できません。パイプから読み取ることができるデータの量を判断するには、PeekNamedPipe()代わりに を使用します。出力値に注意してdwReadください。実際に読み取られたバイト数がわかります。これは、要求したバイト数よりも少ない場合があります。

于 2013-03-29T00:27:48.847 に答える