我正在尝试创建一个(非常)简单的LPCWSTR程序,但由于某些原因,编译器(我使用的是VC++ 2008Express)希望我手动将每个字符串或字符*类型转换为Win32:
每次我这样做时,我都会得到这个编译器错误,例如,我得到了"Hello“和”Note“的错误:
错误字符:'MessageBoxW‘:无法将参数2从'const char 22’转换为'LPCWSTR‘
请告诉我,我不需要每次做这件事的时候都选演员。
代码如下:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, "Hello", "Note", MB_OK);
return 0;
}发布于 2009-03-20 19:33:20
VS2008中新项目的默认设置是构建支持UNICODE的应用程序。您可以更改该默认设置并返回使用ANSI或MBCS应用程序(属性->配置属性->常规->字符集),或者使用Unicode字符串,如下所示:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, L"Hello", L"Note", MB_OK);
return 0;
}不要将字符串转换为,因为这将导致未定义的行为!char不同于wchar_t!
发布于 2009-03-20 19:31:26
问题是,您是为UNICODE构建的,并且传递的是非Unicode字符串。
尝试:
MessageBox(NULL, L"Hello", L"Note", MB_OK);或者为ANSI/MBCS设置构建,或者考虑使用TCHAR(这很麻烦)。
发布于 2009-03-20 19:35:37
我对Win32 C编程的记忆很模糊,但我记得,您需要从将字符串包装在这个宏中开始:
_T("mystring")
在构建unicode时,它将被转换为unicode字符串。
如果只生成unicode,或者您确定只处理unicode中的特定字符串,则可以使用L"“标记,这是_T宏在幕后执行的操作。
您可能需要包含tchar.h标头。
在进行win32编程时,我通常将字符串声明为TCHAR * szWhatever,以便在Win9x上几乎和NT/Win2k/XP上一样工作。(还有其他方便的宏,比如LPTSTR等等,MFC包含一些简单的转换宏,用于在ansi和unicode之间转换以调用特定API的情况)。
https://stackoverflow.com/questions/667616
复制相似问题