Pierwsza funkcja (AnsiString) działa poprawnie:
KOD cpp: UKRYJ
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString wynik = PolaczAnsi("Ala ma: %s %s", "kota", "psa");
ShowMessage(wynik);
}
//---------------------------------------------------------------------------
AnsiString TForm1::PolaczAnsi(AnsiString format, ...)
{
AnsiString s;
va_list list;
va_start(list, format);
s.vprintf(format.c_str(), list);
va_end(list);
return s;
}
{
AnsiString wynik = PolaczAnsi("Ala ma: %s %s", "kota", "psa");
ShowMessage(wynik);
}
//---------------------------------------------------------------------------
AnsiString TForm1::PolaczAnsi(AnsiString format, ...)
{
AnsiString s;
va_list list;
va_start(list, format);
s.vprintf(format.c_str(), list);
va_end(list);
return s;
}
Druga (UnicodeString) w zwracanym tekście zamiast kota i psa zwraca krzaczki:
KOD cpp: UKRYJ
void __fastcall TForm1::Button2Click(TObject *Sender)
{
UnicodeString wynik = PolaczUnicode("Ala ma: %s %s", "kota", "psa");
ShowMessage(wynik);
}
//---------------------------------------------------------------------------
UnicodeString TForm1::PolaczUnicode(UnicodeString format, ...)
{
UnicodeString s;
va_list list;
va_start(list, format);
s.vprintf(format.c_str(), list);
va_end(list);
return s;
}
{
UnicodeString wynik = PolaczUnicode("Ala ma: %s %s", "kota", "psa");
ShowMessage(wynik);
}
//---------------------------------------------------------------------------
UnicodeString TForm1::PolaczUnicode(UnicodeString format, ...)
{
UnicodeString s;
va_list list;
va_start(list, format);
s.vprintf(format.c_str(), list);
va_end(list);
return s;
}
Jak to poprawnie obsłużyć dla UnicodeString?
PS
Tak wiem - w powyższym przypadku zamiast pisać własną funkcje PolaczXXX mógłby użyć np wynik.printf(...). Ale to tylko maksymalnie uproszczony przykład. W rzeczywistości ta funkcja robi więcej rzeczy.