c++ - 解释这个宏

标签 c++ mfc file-io string

#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/

相关文章:

C++ MFC改变单选框的背景颜色

c++ - 如何为 TTF_RenderText_Solid 添加变量到字符串

C++ lambda回调触发事件

c++ - 基本 C++ 习语/技术

c - 输入文本文件未完全读取

C 编程 : Error in program. 不会显示用户输入的文件的最大/最小/平均值

security - 在delphi7中安全删除文件

c++ - 用 c++0x 和 MingW 编译 CImg

java - 如何在Wav文件中跟踪无声音区域?

c - 使用 fprintf 调试调用 C DLL 的 MFC 程序