Вопрос

Я нашел эту линию кода при обновлении проекта C ++ Builder для Rad Studio 2009:

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

Он не скомпилируется в 2009 году, однако какое намерение этой линии и что является лучшем эквивалентным? Учитывая, что mProcessLength->Text сейчас a. wchar_t*.

Это было полезно?

Решение

Я подозреваю, что вы получаете эти ошибки:

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

Это параметры, которые вы передаете на printf, которые несовмешится. Изменение этого:

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

Изменит ваш строковый литерал в правильный тип.

Другие советы

Скорее всего, хорошие, что WHAR обрабатывается как однообразонный тип строки VCL. Он имеет функцию printf, которая принимает стандартные аргументы PrintF, за исключением указателя на строку. Сам Unicodepling заполнен отформатированной строкой.

UnicoDestring Printf.

Таким образом, UnicodeString создается на стеке автоматически, и этот метод printf вызывается, указатель затем заполняется обратно в wchar.

Вы, вероятно, хотите, чтобы WSPrintf ... выглядит так, как изначально был какой-то класс с функцией члена с именем PrintF, что, вероятно, только что прошло свои параметры для WVSPrintF.

На боковом примечании при условии, что текст представляет собой свойство, затем вызов PrintF () на нее не будет настроить свойство с новым значением. Оба аналистирования, так и Unicodestring имеют конструкторы для форматирования числовых значений, поэтому вместо этого можно использовать следующее, во всех версиях C ++ Builder одинаково:

mProcessLength->Text = mStreamLength; 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top