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。我怎样才能做到这一点?
答案 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 );