Delphi-Quellcode:
GetMem(pc, length(params) * sizeof(Pointer));
try
ZeroMemory(pc, length(params) * sizeof(Pointer));
SetString(Result, pc, wvsprintfW(pc, PWIDECHAR(fmt), PCHAR(pdw1)));
pc soll wohl der Speicher für den (Rückgabe)String sein?
ich denk mal, da stimmt dann was mit der länge nicht
1 parameter = 4 Byte ... ich glaub da darf man ruhig sagen "ein Glück daß es nicht öfters kracht"
hab grad das erfolgreich im Einsatz:
Delphi-Quellcode:
Function Format(Msg: LongWord; Const Args: Array of Const): WideString;
Var StrBuffer, StrBuffer2: Array[0..1023] of WideChar;
A: Array[0..15] of LongWord;
i: Integer;
Begin
LoadStringW(HInstance, Msg, @StrBuffer, Length(StrBuffer));
For i := High(Args) downto 0 do A[i] := Args[i].VInteger;
wvsprintfW(@StrBuffer2, @StrBuffer, @A);
Result := PWideChar(@StrBuffer2);
End;
//ich hoff grad so müßte es dann mit 'nem String aussehn
Function Format(Const S: WideString Const Args: Array of Const): WideString;
Var StrBuffer2: Array[0..1023] of WideChar;
A: Array[0..15] of LongWord;
i: Integer;
Begin
For i := High(Args) downto 0 do A[i] := Args[i].VInteger;
wvsprintfW(@StrBuffer2, PWideChar(S), @A);
Result := PWideChar(@StrBuffer2);
End;
ok, die Arraylängen kannst dir ja noch dynamisch umbauen, aber ansonsten reicht es doch?
(und Delphi's Format hat doch auch nur einen statischen Speicher drin)
Zitat von
Bernhard Geyer:
Eigentlich gibt es WideFormat bei Delphi aber diese kommt bei großen (Format-) Strings durcheinandern.
die Länge ist halt aufgrund des statischen Speichers begrenzt