WinInet を使用して、サーバーの 1 つに接続して情報を取得しています。私は以下を使用しています:
indexdata: array of byte[1..5000] of byte;
infoBuffer: array [0..5000] of char;
BufferSize: DWORD;
reserved: DWORD;
text: string;
BufferSize := Length(infoBuffer);
res := HttpQueryInfo(hHttpRequest, HTTP_QUERY_RAW_HEADERS_CRLF, @infoBuffer, BufferSize, Reserved);
Reserved := 0;
InternetReadFile(hHttpRequest, @indexdata, sizeof(indexdata), Reserved);
SetLength(text, Reserved);
CopyMemory(@text[1], @indexdata[1], Reserved);
今までは 2 つのバイト配列で十分でした。状況は変わりました。サーバーは、5000 より大きくても小さくてもよい情報を返すことができるようになりました。さらに悪いことに、InternetReadFile では、infoBuffer で可変サイズを返すことができます。
そのため、indexdata と infobuffer をバイト配列として宣言し、SetLength を使用してその長さを設定しようとしましたが、2 つのことが起こりました。
1) サーバーが返す indexdata のサイズがまだわからないため、たとえば 100000 に適切に設定することはできません。
2) データを使用できるように、Low(indexdata) を渡す CopyMemory を使用して indexdata を単純な文字列変数にコピーすることはできません。
Delphi でこれを処理するにはどうすればよいですか? C ではできますが、Delphi では適切に実行できないようです。
コードは高く評価されています
ありがとう!