Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

AW: Funktionsdeklaration: Beste Vorgehensweise

  Alt 12. Okt 2010, 17:23
Allerdings kann diese den Speicher vor dem Aufruf der Funktion gar nicht reservieren, weil diese nicht weiß wie groß der zurückgelieferte sein wird, kann aber vorsorglich mehr Speicher als dann tatsächlich benötigt (MAX_PATH) reservieren?
Üblicherweise gibt der Aufrufer über einen weiteren Parameter mit, wieviel Speicherplatz er reserviert hat:
Delphi-Quellcode:
function GetProjectPath(PrjName: PChar; Path: PChar; PathSize:Integer):integer;


// so könnte der Aufruf aussehen:
var
  len : integer; // Länge des Ergebnisses
  path : string;
begin
  SetLength(path, 200 {MAX_PATH}); // Speicher reservieren
  len := GetProjectPath('Test', PChar(Path), Length(Path));
  if len < 0 then
    raise Exception.Create('Puffer für GetProjectPath zu klein');
  SetLength(path, len); // "path" auf tatsächliche Länge kürzen
Ziemlich aufwändig für meinen Geschmack; bei einer ActiveX-DLL schreibt man einfach:
path := objectXY.GetProjectPath('Test');
Andreas

Geändert von shmia (12. Okt 2010 um 17:31 Uhr)
  Mit Zitat antworten Zitat