Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: DLL und übergabe von PChar

  Alt 8. Mai 2014, 13:14
Nein

Du lieferst einen Pointer auf ein Ansi-Zeichen zurück und gibts den Speicher auf den dieser Pointer verweist auch wieder frei.

Was denkst du, was unter dem Pointer nun zu finden ist?

So ist das leider nur ein Zufallsgenerator, der alles Mögliche produzieren kann.

So, Spaß beiseite ...

Der Aufrufer muss selber den Speicher für den Rückgabewert zur Verfügung stellen und sich um die Freigabe kümmern. Die Prozedur füllt dann einfach nur diesen Speicher.

Beispiele finden sich im MSDN
http://msdn.microsoft.com/de-de/libr...(v=vs.85).aspx

Dort wird ein (Pointer auf den) Buffer für die Rückgabe übergeben und auch die Größe des Buffers.
Die Funktion füllt dann den Buffer.

Hier ein Beispiel für den Aufruf
Delphi-Quellcode:

function GetEnvironmentVariable(const AEnvVar: string): string;
var
  Len: Integer;
begin
  Len:=Windows.GetEnvironmentVariable(Pchar(AEnvVar),nil,0) ;;
  if Len>0 then
  begin
    SetLength(Result, Len);
    Windows.GetEnvironmentVariable(Pchar(AEnvVar),PChar(Result), Len);
  end
  else
  begin
    Result:='';
    RaiseLastWin32Error;
  end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 8. Mai 2014 um 13:17 Uhr)
  Mit Zitat antworten Zitat