Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi String aus Pointerangabe auslesen (https://www.delphipraxis.net/79287-string-aus-pointerangabe-auslesen.html)

hsbc 19. Okt 2006 17:39


String aus Pointerangabe auslesen
 
Hallo allerseits,

ich habe folgenden Funktionsaufruf:

Delphi-Quellcode:
procedure StatusCallback(hInet: HINTERNET; Context, Status: DWORD;
                         pInformation: Pointer; InfoLength: DWORD); stdcall;
Jetzt möchte ich die Information, welche sich hinter pInformation verbirgt und InfoLength Zeichen lang ist, auslesen.

Da ich mit Pointern noch nicht gearbeitet habe, kenne ich hier mich leider nicht aus. Kann mir vielleicht jemand auf die Sprünge helfen.

mfg
Herbert

sniper_w 19. Okt 2006 17:47

Re: String aus Pointerangabe auslesen
 
Hi. Einem String kann man es so zuweisen:
Delphi-Quellcode:
var
  i: Integer;
  strInfo: string;

begin

  SetLength(strInfo, InfoLength);

  for i:=1 fo High(strInfo) do strInfo[i] := PChar(pInfomation)[i-1];

end;
Auf Fehler nicht geprüft.

3_of_8 19. Okt 2006 17:50

Re: String aus Pointerangabe auslesen
 
Ich würde es so machen:

Delphi-Quellcode:
var str: String;
begin
  setlength(str, InfoLength);
  str:=PString(pInformation)^;
end;

marabu 19. Okt 2006 18:06

Re: String aus Pointerangabe auslesen
 
Hallo Herbert,

da kann sich sehr Unterschiedliches hinter dem Zeiger verbergen:

Delphi-Quellcode:
uses
  WinSock,
  WinInet;

procedure StatusCallback(hInet: HINTERNET; Context, Status: DWORD;
    pInformation: Pointer; InfoLength: DWORD);
var
  sa: TSockAddr;
  iar: TInternetAsyncResult;
  s: String;
  dw: DWORD;
begin
  case Status of
    INTERNET_STATUS_CONNECTING_TO_SERVER,
    INTERNET_STATUS_CONNECTED_TO_SERVER:
      Move(pInformation^, sa, SizeOf(sa));
    INTERNET_STATUS_REQUEST_COMPLETE,
    INTERNET_STATUS_HANDLE_CREATED:
      Move(pInformation^, iar, SizeOf(iar));
    INTERNET_STATUS_REDIRECT,              // URL
    INTERNET_STATUS_RESOLVING_NAME,        // HOSTNAME
    INTERNET_STATUS_NAME_RESOLVED:         // HOSTNAME
      s := PChar(pInformation);
    INTERNET_STATUS_STATE_CHANGE,
    INTERNET_STATUS_RESPONSE_RECEIVED,
    INTERNET_STATUS_REQUEST_SENT:
      dw := PDWORD(pInformation)^;
  end;
end;
Getippt und nicht getestet.

Grüße vom marabu

hsbc 19. Okt 2006 18:08

Re: String aus Pointerangabe auslesen
 
Vielen herzlichen Dank an alle.

Werde das gleich mal versuchen ...

mfg
Herbert


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz