#define __T(x) L ## x
在 MFC 源头文件之一的代码中找到。它主要用于将字符串转换为......(我不知道是什么)。如果我是正确的,它会将字符串转换为 LPCTSTR...也不知道该类型是什么...
我似乎无法将 char* 转换为 LPCTSTR。在 MFC 文件处理过程中,以下代码在尝试打开文件时将始终返回错误...
char* filepath = "C:\\Program Files\\Microsoft Office\\Office12\\BITMAPS\\STYLES\\GLOBE.WMF";
if( !file.Open((LPCTSTR)filepath , CFile::modeRead, &fexp) )
{
fexp.ReportError();
return 1;
}
但是如果我这样写,它不会报错:
if( !file.Open( _T("C:\\Program Files\\Microsoft Office\\Office12\\BITMAPS\\STYLES\\GLOBE.WMF") , CFile::modeRead, &fexp) )
{
fexp.ReportError();
return 1;
}
我正在考虑将一个变量作为第一个参数传递给 CFile::Open() 方法。
最佳答案
## 运算符是预处理器连接运算符。也就是说,这是有效的代码:
#define DECLARE_PTR(X) typedef std::auto_ptr<X> X##Ptr
DECLARE_PTR(int); // gets expanded to typedef std::auto_ptr<int> intPtr
intPtr i(new int(1));
在您的情况下,_T
宏将 Long 转换符号 (L
) 添加到给定的输入中。这仅适用于字符串文字。这意味着你不能写
char* str = "ABC";
wchar_t* wstr = _T(str); // error: Lstr is undefined
但你可以放心地写
char* str = "ABC";
LPTSTR wstr = _T("ABC"); // OK, gets expanded to wchar_t * wstr = L"ABC";
// when UNICODE is defined
// and char * wstr = "ABC"; when unicode is not defined
L
运算符是 char 和 char* 文字到 Long 表示的转换器(从 byte
宽表示到 sizeof(wchar_t)
-广泛的代表性)。
关于c++ - 解释这个宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2809407/