Frage

fand ich diese Codezeile, wenn ein C ++ Builder-Projektes zu RAD Studio 2009 Upgrade:

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

Es lässt sich nicht kompilieren im Jahr 2009, aber was ist die Absicht dieser Linie und was ist eine bessere gleichwertig? Da mProcessLength->Text nun ein wchar_t*.

War es hilfreich?

Lösung

Ich vermute, dass Sie diese Fehler erhalten:

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

Es ist der Parameter Sie vorbei an printf, die nicht übereinstimmen. Ändern Sie es an:

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

Ihre Stringliteral auf den richtigen Typ ändern.

Andere Tipps

Die Chancen stehen gut, dass wchar als Unicode VCL-String-Typ behandelt wird. Es hat eine printf-Funktion, die Standard printf Argumente mit Ausnahme der Zeiger auf String nimmt. Die Unicode sich mit dem formatierten String gefüllt ist.

UnicodeString- printf

So ein Unicode automatisch auf dem Stapel erstellt wird und die printf-Methode aufgerufen wird, wird der Zeiger dann wieder in wchar gestopft.

Sie wollen wahrscheinlich wsprintf ... sieht aus wie das war ursprünglich einige Klasse mit einer Memberfunktion printf genannt, dass wahrscheinlich seine Parameter nur wvsprintf übergeben.

Auf einer Seite zur Kenntnis, Text unter der Annahme ist eine Eigenschaft, dann printf () aufrufen, auf sie wird nicht die Eigenschaft, mit dem neuen Wert upate. Sowohl Ansistring und Unicode haben Konstrukteure für numerische Werte Formatierung, so kann folgende stattdessen verwendet werden, in allen Versionen von C ++ Builder gleich:

mProcessLength->Text = mStreamLength; 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top