【发布时间】:2014-02-12 08:26:21
【问题描述】:
我正在将一个旧项目从 C++ Builder 2009 移植到 XE5。在旧项目中,Unicode 字符串的编译器选项设置为“_TCHAR 映射到:char”。这在旧项目中运行良好。
移植时,我在 XE5 中设置了相同的编译器选项。但是对于这样的代码,我仍然会遇到编译器错误:
std::string str = String(some_component.Text).t_str();
这会产生以下错误:
[bcc32 警告] file.cpp(89): W8111 Accessing deprecated 实体 'UnicodeString::t_str() const'
[bcc32 错误] file.cpp(89): E2285 找不到匹配项 '操作符字符串::=(wchar_t *)'
显然 XE5 已经决定 String::t_str() 应该给我一个 wchar_t* 而不是 char*,即使我已经如上所述设置了编译器选项。
我该如何解决这个问题?
我很清楚 C++ Builder 已采取步骤在内部使用 Unicode(即使在 2009 版本中),但这是一个具有 200k LOC 的旧项目。将其更新为 Unicode 将是一项艰巨的任务,优先级非常低。
编辑
我可以通过将代码更改为来使其工作
std::string str = AnsiString(some_component.Text).c_str();
但这意味着我必须在很多地方更改代码。有没有更好的不涉及重写代码的方法?
【问题讨论】:
-
如果没有其他问题,您可以求助于#define String(a) AnsiString(a)
标签: c++ unicode c++builder vcl