J'utilise WinInet pour connecter et extraire des informations de l'un de nos serveurs. J'utilise les éléments suivants:tableaux dynamiques et wininet en Delphi?
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);
Les deux tableau d'octets étaient assez jusqu'à présent. Les choses ont changé. Le serveur peut renvoyer maintenant des informations pouvant être plus grandes ou plus petites que 5000; pire encore, dans InternetReadFile peut renvoyer une taille variable dans le infoBuffer.
J'ai donc essayé de déclarer l'indexdata et l'infobuffer comme un tableau d'octets, puis d'utiliser SetLength pour définir sa longueur, mais 2 choses se sont produites.
1) Je ne sais pas encore la taille de INDEXDATA que le serveur retourne donc je ne peux pas définir correctement à, disons, 100000.
2) Je ne peux pas utiliser (comme il est maintenant) passant CopyMemory Faible (indexdata) pour copier des données d'index vers une simple variable de chaîne afin que je puisse utiliser les données.
Comment gérer cela dans Delphi? Je peux le faire en C mais je n'arrive pas à le faire correctement en Delphi.
Le code est apprécié
merci!
'Reserved' est un nom de variable plutôt mauvais. Qu'en est-il de 'lpdwNumberOfBytesRead'? –
... ou même le "InputSize" un peu plus lisible? : P –
@andreas sûr, je vais le changer – Jessica