Ich habe nochmal darüber nachgedacht und mir ist aufgefallen, das der Code, so wie er von mir vorgeschlagen wurde, gleich zwei Memoryleaks produziert. Hier nun eine korregierte Fassung. (Ich gehe davon aus, das die Windows-Funktionen keine
Exception erzeugen werden).
Delphi-Quellcode:
procedure GetCommandLineArgs(Args: TStrings);
type
TPWideCharArray = array[0..0] of PWideChar;
var
NumArgs: Integer;
TempArgs: PPWideChar;
i: Integer;
begin
TempArgs := CommandLineToArgvW(GetCommandLineW, NumArgs);
try
if TempArgs <> nil then
begin
for i := 0 to NumArgs - 1 do
Args.Add(TPWideCharArray(TempArgs^)[i]);
end
else
RaiseLastOSError;
finally
GlobalFree(THandle(TempArgs));
end;
end;