Thema: Delphi Mit PChar arbeiten

Einzelnen Beitrag anzeigen

MathiasSimmack
(Gast)

n/a Beiträge
 
#4

Re: Mit PChar arbeiten

  Alt 23. Jun 2004, 09:53
Zitat von MrKnogge:
Ich weis, Mathias hat die antwort jetzt schon gepostet, aber liegt des "Problem" nicht eher an dem + ?
Ja, durch das Plus meckert der Compiler rum, dass die Typen nicht passen. In einigen Fällen genügt es, wenn man beides noch mal als "pchar" castet:
wDir := pchar(wDir + 'System32\');
Zitat:
wDir := 'System32\' schreiben würde, ging das doch auch, weil Delphi 'System32\' dann als PChar-Konstante speichert,oder irre ich mich jetzt da
Nein, du hast natürlich recht. Die einfache Zuweisung, wie in deinem Beispiel gezeigt, ist bei Delphi nicht das Problem. Nur wenn die pchar-Variable bereits etwas enthält, und du möchtest noch einen Text anhängen, dann brauchst du entweder die o.g. Funktion, oder du versuchst dein Glück mit dem o.g. Casten. In dem Fall geht es ja darum, dass der schon vorhandene Inhalt von "wDir" nicht entfernt wird. Und das würde er, wenn du einfach nur
wDir := 'System32\'; schreibst.


btw: Über den Sinn, an "wDir" (die Vermutung liegt nahe, dass die Variable den Namen des Windows-Verzeichnisses enthält) noch das Systemverzeichnis anzuhängen, will ich mal nicht streiten. Vielleicht ist das reale Beispiel ein anderes, ansonsten wäre wohl "GetSystemDirectory" eine Idee.
Aber man kann ja auch programm-intern weiter mit Strings arbeiten. Ich habe für ein Programm bspw. mal den Ordner "%windir%\help" benötigt, und dafür habe ich mir eine Funktion geschrieben, die mir den Ordner wie gewohnt als String zurückliefert:
Delphi-Quellcode:
function GetWinHelpDir: string;
begin
  SetLength(Result,GetWindowsDirectory(nil,0) + 1);
  SetLength(Result,GetWindowsDirectory(@Result[1],length(Result)));

  if(Result <> '') then
    Result := Result + '\help\';
end;
Und damit ließ sich a) gut arbeiten, und b) das Casten nach pchar war im Bedarfsfall auch kein Problem.
  Mit Zitat antworten Zitat