Ich benutze folgende Funktion als Ersatz für die Funktion Format:
Delphi-Quellcode:
function FormatW(fmt: WideString; params: array of const): WideString;
var
pdw1, pdw2 : PDWORD;
i : integer;
pc : PWIDECHAR;
begin
pdw1 := nil;
if length(params) > 0 then
GetMem(pdw1, length(params) * sizeof(Pointer));
pdw2 := pdw1;
for i := 0 to high(params) do
begin
pdw2^ := DWORD(PDWORD(@params[i])^);
inc(pdw2);
end;
GetMem(pc, length(params) * sizeof(Pointer));
try
ZeroMemory(pc, length(params) * sizeof(Pointer));
SetString(Result, pc, wvsprintfW(pc, PWIDECHAR(fmt), PCHAR(pdw1)));
except
Result := '';
end;
if (pdw1 <> nil) then
FreeMem(pdw1);
if (pc <> nil) then
FreeMem(pc);
end;
Allerdings bekomme ich da hin und wieder eine "invalid pointer operation" in der Zeile FreeMem(pdw1);. Ich kann das jetzt auch nicht genau sagen unter welchen Bedingungen sie auftritt.
Sieht da jemand einen Fehler in der Funktion oder kann mit einer alternativen Funktion aufwarten?