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');