我正在使用 WinInet 从我们的一台服务器连接和检索信息。我正在使用以下内容:
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);
到目前为止,这两个字节数组已经足够了。事情发生了变化。服务器现在可以返回大于或小于5000的信息;最糟糕的是,在 InternetReadFile 中,可以在 infoBuffer 中返回可变大小。
所以我尝试将 indexdata 和 infobuffer 声明为字节数组,然后使用 SetLength 设置它的长度,但是发生了两件事。
1)我仍然不知道服务器将返回的 indexdata 的大小,因此我无法正确将其设置为 100000。
2)我不能使用(现在这样)CopyMemory 传递 Low(indexdata) 将 indexdata 复制到一个简单的字符串变量,所以我可以使用数据。
我如何在 Delphi 中处理这个问题?我可以在 C 中做到这一点,但我似乎无法在 Delphi 中正确地做到这一点。
代码表示赞赏
谢谢!