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

Can I use the _T() macro with a variable?

本文关键字:一起 变量 我可以      更新时间:2023-10-16
string pagexx = "http://website.com/" + chatname;
string pathxx = "test";
HRESULT resxx = URLDownloadToFile (NULL, _T(pagexx.c_str()),_T(pathxx.c_str()), 0, NULL );

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

我不能像_T("nice")那样输入字符串,因为我特别需要聊天名称。 我怎样才能做到这一点?

_T是一个宏,用于在文字上放置正确的前缀。这不是您正在做的事情,因此您不想使用_T

您的问题从第一行开始,因为您已经硬编码了您正在使用具有窄字符的字符串(即 string 是专门包含char元素)的字符串,而不是选择适当的字符串类型。请参阅问题根据 MSVC++ 中的 unicode 设置在 std::string 和 std::wstring 之间自动更改?。

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

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

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

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

_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 );