Warum so kompliziert? Laut der Doku
MSDN: ExpandEnvironmentStrings gilt für den
lpSrc Parameter
Zitat:
A buffer that contains one or more environment-variable strings in the form: %variableName%. For each such reference, the %variableName% portion is replaced with the current value of that environment variable.
Also kann man sich das Ganze Aufsplitten sparen und
'%HOMEDRIVE%%HOMEPATH%'
in einem übergeben.
BTW:
Wer mit
PWideChar arbeitet sollte auch konsequenterweise mit
ExpandEnvironmentStringsW arbeiten, sonst ist bei der nächsten Umstellung (wie bei
ANSI auf
Unicode) das Geschrei wieder riesengross.
PS:
So würde diese Funktion bei mir aussehen:
Delphi-Quellcode:
function ExpandEnvironment(
const AInput:
string ):
string;
var
lResult: Cardinal;
begin
lResult :=
Winapi.Windows.ExpandEnvironmentStrings( PChar(AInput),
nil, 0 );
if lResult = 0
then
RaiseLastOSError( );
SetLength( Result, lResult );
lResult :=
Winapi.Windows.ExpandEnvironmentStrings( PChar(AInput), PChar( Result ), lResult );
if lResult = 0
then
RaiseLastOSError( );
SetLength( Result, lResult - 1 );
end;