【发布时间】:2010-07-12 16:44:23
【问题描述】:
我正在使用 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 中正确完成。
感谢代码
谢谢!
【问题讨论】:
-
Reserved是一个相当糟糕的变量名。lpdwNumberOfBytesRead呢? -
...或者更易读的“InputSize”? :P
-
@andreas 当然,我会改变它
-
“字节数组[1..5000]字节”是指“字节数组[1..5000]”?
-
indexdata有 5000 个元素;infoBuffer有 5001 个元素。
标签: windows delphi arrays wininet