我可以将_T()宏与变量一起使用吗?

时间:2015-06-13 08:15:34

标签: c++ variables

string pagexx = "http://website.com/" + chatname;
string pathxx = "test";
HRESULT resxx = URLDownloadToFile (NULL, _T(pagexx.c_str()),_T(pathxx.c_str()), 0, NULL );

错误是"错误:标识符" Lpagexx"未定义。" 与pathxx相同

我无法输入类似_T("nice")的字符串,因为我需要特别提供chatname。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:1)

_T是一个用于在文字上放置正确前缀的宏。这不是你正在做的,所以你不想使用_T

你的问题从第一行开始,因为你硬编码你正在使用带有窄字符的字符串(即string是一个特定于char元素的字符串)而不是选择合适的字符串字符串类型。请参阅问题Automatically change between std::string and std::wstring according to unicode setting in MSVC++?

答案 1 :(得分:1)

如果您的字符串只包含非unicode,那么您最简单的解决方案是:

HRESULT resxx = URLDownloadToFileA (NULL, pagexx.c_str(), pathxx.c_str(), 0, NULL );

_T这些东西至少已经过时了十年,根本没有理由为两个不同版本的Windows API编译应用程序而烦恼。

如果您的std::string包含UTF-8,则需要将其转换为UTF-16,然后调用URLDownloadToFileW

答案 2 :(得分:0)

_T只是一个带有前缀的宏,其参数为L(如果使用unicode编译)。必须使用wchar_t(或wstring和simmilar)

声明变量

假设chatname的类型为wstring

 wstring pagexx = L"http://website.com/" + chatname;
 wstring pathxx = L"test";
 HRESULT resxx = URLDownloadToFile ( NULL, pagexx.c_str(), pathxx.c_str(), 0, NULL );

或更好(因为您在Microsoft下编译某些东西,您可以使用更通用的宏,这样您可以在设置或不设置UNICODE的情况下编译相同的代码。)

 _tstring pagexx = _T("http://website.com/") + chatname;
 _tstring pathxx = _T("test");
 HRESULT resxx = URLDownloadToFile ( NULL, pagexx.c_str(), pathxx.c_str(), 0, NULL );