Hier hast du noch ein Beispiel (dann hör ich aber auch auf, dich zu nerven) aus der Rubrik: "Es ist zwar ein PChar, aber ..." -
Die Funktion [
msdn]"InternetCrackUrl"[/
msdn] zerlegt einen
Grafen (
) in seine Bestandteile; sprich: Host, Schema, usw. Die entsprechenden Membervariablen sind zwar als pchar deklariert, allerdings dienen sie hier der
Ausgabe der Daten. Das heißt, die Funktion erwartet von dir, dass du einen Puffer bereitstellst, der groß genug ist.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
const
szUrl =
'
http://www.delphipraxis.net/topic28303_profil+temp+verzeichniss.html';
var
url : TUrlComponents;
scheme,
buf,
urlpath :
array[0..MAX_PATH]
of char;
begin
ZeroMemory(@
url,sizeof(
url));
url.dwStructSize := sizeof(
url);
url.lpszHostName := buf;
url.dwHostNameLength := sizeof(buf);
url.lpszScheme := scheme;
url.dwSchemeLength := sizeof(scheme);
url.lpszUrlPath := urlpath;
url.dwUrlPathLength := sizeof(urlpath);
if(InternetCrackUrl(szUrl,length(szUrl),0,
url))
then
MessageBox(0,pchar(Format('
Host: %s' + #13#10 + '
Schema: %s' + #13#10 +
'
URL: %s',[buf,scheme,urlpath])),
nil,0);
end;
Wenn du denkst, dass das statische Array (0-MAX_PATH) nicht ausreicht, dann kannst du auch hier mit "pchar"-Variablen arbeiten, wobei du dann natürlich den Puffer vorher mit "GetMem" erzeugen musst. Ansonsten rumpelt´s wieder ...
So, genug jetzt.