Pergunta

Encontrei esta linha de código ao atualizar um projeto de construtor C ++ para o Rad Studio 2009:

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

Ele não compila em 2009, no entanto, qual é a intenção dessa linha e o que é um equivalente melhor? Dado que mProcessLength->Text agora é um wchar_t*.

Foi útil?

Solução

Eu suspeito que você esteja recebendo esses erros:

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

São os parâmetros que você está passando para o PrintF que são incompatíveis. Mudando para:

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

mudará sua string literal para o tipo correto.

Outras dicas

É bom que o WCHER seja tratado como um tipo de sequência VCL unicodestring. Possui uma função Printf que leva argumentos PrintF padrão, exceto para o ponteiro da string. O próprio unicodestring é preenchido com a corda formatada.

Unicodestring printf

Portanto, um unicodestring é criado na pilha automaticamente e o método printf é chamado, o ponteiro é então recheado de volta ao WCHAR.

Você provavelmente quer o WSPRINTF ... parece que foi originalmente uma classe com uma função de membro chamada Printf, que provavelmente acabou de passar seus parâmetros para o WVSPrintf.

Em uma nota lateral, assumindo que o texto seja uma propriedade e, em seguida, chamar Printf () não utilizará a propriedade com o novo valor. Tanto o Ansistring quanto o Unicodestring têm construtores para formatar valores numéricos, portanto o seguinte pode ser usado em todas as versões do construtor de C ++ igualmente:

mProcessLength->Text = mStreamLength; 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top