Question

Je trouve cette ligne de code lors de la mise à niveau d'un projet C ++ Builder à RAD Studio 2009:

mProcessLength->Text.printf("%d",mStreamLength);

Il ne compile pas en 2009, mais ce qui est le but de cette ligne et ce qui est un meilleur équivalent? Étant donné que mProcessLength->Text est maintenant wchar_t*.

Était-ce utile?

La solution

Je soupçonne que vous obtenez ces erreurs:

E2034 Cannot convert 'const char *' to 'const wchar_t *'
E2342 Type mismatch in parameter 'format' (wanted 'const wchar_t *', got 'const char *')

Ce sont les paramètres que vous passer à printf qui sont incompatibles. il passer à:

mProcessLength->Text.printf(L"%d",mStreamLength);

va changer votre chaîne littérale du type correct.

Autres conseils

Les chances sont bonnes que wchar est traitée comme un type de chaîne VCL UnicodeString. Il a une fonction printf qui prend des arguments standards printf sauf pour le pointeur vers la chaîne. Le UnicodeString lui-même est rempli de la chaîne formatée.

UnicodeString printf

Ainsi, un UnicodeString est créé sur la pile automatiquement et la méthode printf est appelée, le pointeur est alors bourré de nouveau dans wchar.

Vous voulez probablement wsprintf ... ressemble à l'origine une classe avec une fonction de membre nommé printf, qui probablement vient de passer ses paramètres à wvsprintf.

Sur une note de côté, en supposant texte est une propriété, puis appeler printf () sur elle ne sera pas Upate la propriété avec la nouvelle valeur. Les deux AnsiString et UnicodeString ont des constructeurs pour le formatage des valeurs numériques, de sorte que les éléments suivants peuvent être utilisés à la place, dans toutes les versions de C ++ Builder également:

mProcessLength->Text = mStreamLength; 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top