我正在将一个旧项目从C++ Builder 2009移植到XE5。在旧项目中,Unicode字符串的编译器选项设置为“_TCHAR
映射到:char”。这在旧项目中运行良好。
当进行移植时,我在XE5中设置了相同的编译器选项。但是,对于像这样的代码,我仍然会收到编译器错误:
std::string str = String(some_component.Text).t_str();
这会导致以下错误:
所以显然XE5决定使用[bcc32警告] file.cpp(89): W8111 访问已弃用实体 'UnicodeString::t_str() const'
[bcc32错误] file.cpp(89): E2285 无法找到匹配项 'operator string::=(wchar_t *)'
wchar_t*
而不是char*
来提供String::t_str()
,即使我已经按照上述说明设置了编译器选项。如何解决这个问题?
我很清楚C++ Builder已经采取了在内部使用Unicode的步骤(甚至在2009版中),但这是一个有200k行代码的旧项目。将其更新为Unicode将是一项优先级非常低的艰巨任务。 编辑 我可以通过将代码更改为以下内容使其正常工作:
std::string str = AnsiString(some_component.Text).c_str();
但这意味着我必须在许多地方更改代码。是否有更好的方式,而不涉及重写代码?