WinInet을 사용하여 Google 서버 중 하나에서 정보를 검색하고 연결합니다. 다음을 사용하고 있습니다.델파이의 동적 배열과 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에서 가변 크기를 반환 할 수 있습니다.
그래서 인덱스 데이터 및 infobuffer 바이트 배열로 선언하고 SetLength 해당 길이를 설정할 사용했지만 2 일이 일어났습니다.
1) 나는 아직도 서버가 내가 제대로 말,로 설정할 수 없습니다 때문에 돌려 보낼 INDEXDATA의 크기를 모르는, 100000
2) 지금)에서 CopyMemory 통과로 난 (사용할 수 없습니다 인덱스 데이터를 간단한 문자열 변수에 복사하여 데이터를 사용할 수 있도록하는 낮은 (인덱스 데이터).
어떻게 이것을 델파이에서 처리합니까? 나는 C로 할 수 있지만 델파이에서 제대로 할 수없는 것 같습니다.
코드가 인정됩니다.
감사합니다!
'예약 됨'은 다소 나쁜 변수 이름입니다. 'lpdwNumberOfBytesRead'는 어떨까요? –
... 또는 약간 더 읽기 쉬운 "InputSize"? : P –
@andreas 확실히, 내가 그것을 바꿀 것이다 – Jessica