【发布时间】:2020-03-31 18:08:31
【问题描述】:
我在查看一些 windows directx 应用程序代码,看到他们使用宏 _T(x) 来设置他们的窗口名称,在查看宏定义时我看到了这个
#define _T(x) __T(x)
然后我跟着看了看__T
#define __T(x) x
为什么会存在?
【问题讨论】:
-
可能与字符串转换有关。你能找到一个使用它的例子吗?编辑:stackoverflow.com/questions/240353/… 是我的想法,但情况不同。
-
Unicode Programming Summary
_T是一个宏,根据设置,它可能会做一些事情。 -
此处使用:WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, _T("ImGui Example"), NULL };或者在这里:HWND hwnd = ::CreateWindow(wc.lpszClassName, _T("Dear ImGui DirectX9 Example"), WS_OVERLAPPEDWINDOW, 100, 100, 1280, 800, NULL, NULL, wc.hInstance, NULL);
-
我猜 DirectX 曾经与 MBCS 和 Unicode 应用程序一起工作。因此
_T是用于根据构建类型表示宽或窄字符串的宏。另外,请注意GetModuleHandle也是一个宏——它实际上是GetModuleHandleA或GetModuleHandleW,同样取决于构建。所以它与_T的情况相同,即根据构建类型而变化。 -
我知道 GetModuleHandle 是如何工作的。看GetModuleHandle的宏定义时,直接显示了这两种情况,看_T时却没有
标签: c++