visualc&x2B+;自动将A或W追加到函数末尾 在C++中,我定义了一个类,它作为成员: static const std::basic_string<TCHAR> MyClass_;
当我创建这个类的一个实例,然后尝试访问它时,会弹出intellisense,但是名称已经更改,这取决于项目是针对Unicode还是多字节编译的。如果已为Unicode编译,则函数显示为:visualc&x2B+;自动将A或W追加到函数末尾 在C++中,我定义了一个类,它作为成员: static const std::basic_string<TCHAR> MyClass_;,c++,string,winapi,visual-c++,unicode,C++,String,Winapi,Visual C++,Unicode,当我创建这个类的一个实例,然后尝试访问它时,会弹出intellisense,但是名称已经更改,这取决于项目是针对Unicode还是多字节编译的。如果已为Unicode编译,则函数显示为: aClass.GetMyClassNameW(); 否则就是: aClass.GetMyClassNameA(); 我想知道的是这个名字是怎么改的? 我还想知道intellisense是否可以显示函数的正确名称?这样我就可以像这样访问它: aClass.GetMyClassName() 编辑:我在代码中使
aClass.GetMyClassNameW();
否则就是:
aClass.GetMyClassNameA();
我想知道的是这个名字是怎么改的?
我还想知道intellisense是否可以显示函数的正确名称?这样我就可以像这样访问它:
aClass.GetMyClassName()
编辑:我在代码中使用的确切成员函数名称是:
WinClass::GetClassName()
您的方法名称字面上是“GetMyClassName”还是“GetClassName”
GetClassName位于SDK(winuser.h)中,并根据UNICODE定义重新定义。如果您使用的是“GetClassName”,那么intellisense可能会感到困惑;事实上,编译器也在为实际编译的方法生成A/W后缀,但这一切都会起作用,因为每个人(链接器/编译器)都同意重新定义的名称(即使它不可见)。这是windows支持事实上2个版本的Win32 API的方式:
- 一个用于带有(
)的1字节ascii字符char
- 一个用于unicode,字符通常为2字节宽(
)wchar
winuser.h
,您将看到以下内容:
WINUSERAPI
BOOL
WINAPI
SetWindowTextA(
__in HWND hWnd,
__in_opt LPCSTR lpString);
WINUSERAPI
BOOL
WINAPI
SetWindowTextW(
__in HWND hWnd,
__in_opt LPCWSTR lpString);
#ifdef UNICODE
#define SetWindowText SetWindowTextW
#else
#define SetWindowText SetWindowTextA
#endif // !UNICODE
我不能确切地说出为什么函数GetMyClassName也会发生同样的情况。但它可能也有同样的原因。可能的解决方案应该是更改函数名或取消宏的定义。没错,它是GetClassName()。非常感谢,这似乎就是它这么做的原因。−1所声称的事实是不真实的。
WINUSERAPI
BOOL
WINAPI
SetWindowTextA(
__in HWND hWnd,
__in_opt LPCSTR lpString);
WINUSERAPI
BOOL
WINAPI
SetWindowTextW(
__in HWND hWnd,
__in_opt LPCWSTR lpString);
#ifdef UNICODE
#define SetWindowText SetWindowTextW
#else
#define SetWindowText SetWindowTextA
#endif // !UNICODE