Einzelnen Beitrag anzeigen

SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#1

PChar, PWideChar, Array of Char und Windows API

  Alt 2. Mai 2015, 16:16
Hallo zusammen,
ich arbeite gerade mit der Windows API.
Jetzt stoße ich dabei auf ein Problem.

Aber vorweg, ich rufe die Methode GetUserName auf.
Windows benutzt dabei folgende Variablen:
LPTSTR lpBuffer
LPDWORD lpnSize

Nach ein wenig Googlen bin ich auf einen Thread hier im Board gestoßen, indem stand, dass das passende Gegenstück von "LPTSTR" "PChar" ist.

Jetzt stellt Delphi aber eine eigene Unit bereit, die die Windows API abbildet.
Und dort wird aber statt "LPTSTR" "PWideChar" verwendet.

Die erste Frage ist, was der Unterschied von PChar und PWideChar ist. Beides sind doch Pointer mit Nullterminierung der Strings.
Da ich aber mit beiden Datentypen einen Fehler bekomme, habe ich mich ein wenig umgeschaut.

Fündig bin ich bei Delphi-Treff geworden.
Dort wird die Methode wie folgt aufgerufen:
Delphi-Quellcode:
function GetUsername: String;
var
  Buffer: array[0..255] of Char;
  Size: DWord;
begin
  Size := SizeOf(Buffer);
  if not Windows.GetUserName(Buffer, Size) then
    RaiseLastOSError; //RaiseLastWin32Error; {Bis D5};
  SetString(Result, Buffer, Size - 1);
end;
Es wird also ein Array of Char benutzt.
Und damit geht's dann auch.

Jetzt stellt sich mir die Frage, wieso?

Wenn ich statt des "Array of Char" eben "PChar" oder "PWideChar" benutze, dann ist nach dem Aufruf von "GetUserName" Buffer leer.
Nur mit dem Array of Char steht in Buffer etwas drin.


Könnt ihr mir helfen?
  Mit Zitat antworten Zitat