我发现这行代码升级C ++ Builder项目到RAD工作室2009时:

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

它不会在2009年编译,但是是什么意图这一行的,什么是更好的相同呢?鉴于mProcessLength->Text现在是一个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);

将您的字符串文字更改为正确的类型。

其他提示

机会是好的,WCHAR被作为一个的UnicodeString VCL字符串类型处理。它有一个printf函数,它除了指向字符串printf的标准参数。所述的UnicodeString本身填充有格式的字符串。

的UnicodeString的printf

因此在堆栈上创建的UnicodeString自动和printf的方法被调用时,指针再酿回WCHAR。

您可能想wsprintf ......看起来像原本一些类名为printf的一个成员函数,那可能只是通过其参数wvsprintf。

在一个方面说明,假定文本是一个属性,则调用它的printf()不会upate用新值的属性。既AnsiString类型和的UnicodeString有用于格式化数字值的构造,所以下面可以代替同样可以使用,在C ++生成器的所有版本:

mProcessLength->Text = mStreamLength; 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top