Thema: Delphi PChars und Dll

Einzelnen Beitrag anzeigen

Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: PChars und Dll

  Alt 13. Aug 2006, 13:49
Einen PChar als Ergebnis einer Funktion zurückzugeben (egal ob DLL oder nicht) ist keine gute Idee. Was denkst du, warum es keine Windows-API-Funktion gibt, die so etwas tut? Funktionen, die einen String ermitteln, bekommen normalerweise zwei Parameter: einen PChar von der aufrufenden Funktion und dessen Größe (siehe z.B. MSDN-Library durchsuchenGetWindowsDirectory).

Selbst wenn du eine globale Stringvariable für den Rückgabewert benutzt, so hättest du immer noch das Problem, dass das Ergebnis nur so lange Gültigkeit besitzt, wie du diese Variable nicht änderst. Und ob der Aufrufer ein korrektes Ergebnis erhält hängt einfach nur davon ab, ob der Speicher in der Zwischenzeit schon überschrieben wurde oder nicht (worauf du normalerweise keinen Einfluss hast).

Die einzige wirklich funktionierende Lösung wäre ein festes char-Array:
Delphi-Quellcode:
// Globale Variable mit gleichbleibender Adresse
var
  ReturnValue: array [0 .. 255] of char;

function GetCurrentSkinFile : PChar;
var
  SkinDir : String;
  SkinName : String;
  stemp:String;
begin
  SkinDir := GetSkinDirectory;
  SkinName := GetSkinName;
  stemp := SkinDir +
           IncludeTrailingBackslash(SkinName) +
           'Skin.xml';
  StrCopy(@ReturnValue[0], PChar(stemp));
  result := @ReturnValue[0];
end;
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat