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?