回 帖 发 新 帖 刷新版面

主题:求助关于UNICODE

#include <windows.h>

#define _UNICODE
#define UNICODE

#include <tchar.h>


int WINAPI WinMain (    HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    LPSTR szCmdLine, int iCmdShow)
{
    TCHAR * p = "Hello!";
    MessageBox (NULL, _TEXT (p), _TEXT ("HelloMsg"),  //此处编译不通过
        MB_OK | MB_DEFBUTTON2 | MB_ICONEXCLAMATION);
    return 0 ;
}

编译时有一个错误:
error C2065: 'Lp' : undeclared identifier


请问:使用UNICODE不是这么用的吗?

回复列表 (共8个回复)

沙发


    MessageBox(NULL,_TEXT(p),_TEXT("HelloMsg"),
        MB_OK | MB_DEFBUTTON2 | MB_ICONEXCLAMATION);
这句可以的,原来的错误是因为你输入了编译器未知的字符导致的

板凳

嗯。。这个我清楚,就因为#define UNICODE了,注释掉是可以的

那请问如何使用UNICODE呢?谢谢

3 楼

你说的是”如何使用UNICODE字符集“还是“如何设置程序使其为UNICODE字符集的程序”?

4 楼

#include <windows.h>


int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                     LPSTR szCmdLine, int iCmdShow)
{
    wchar_t * p = L"Hello!";
    MessageBoxW (NULL, p, L"HelloMsg", MB_OK | MB_DEFBUTTON2 | MB_ICONEXCLAMATION);
    return 0 ;
}


直接显式使用UNICODE

5 楼

#include <windows.h>


int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                     LPSTR szCmdLine, int iCmdShow)
{
    char * p = "Hello!";
    MessageBoxA (NULL, p, "HelloMsg", MB_OK | MB_DEFBUTTON2 | MB_ICONEXCLAMATION);
    return 0 ;
}
显式使用ASCII

6 楼

#include <windows.h>
#include <tchar.h>


int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                     LPSTR szCmdLine, int iCmdShow)
{
    TCHAR * p = __T("Hello!");   //注意是2条下划线
    MessageBox (NULL, p, __T("HelloMsg"), MB_OK | MB_DEFBUTTON2 | MB_ICONEXCLAMATION);
    return 0 ;
}
这是用VC中的TCHAR.H的通用代码, 是否使用UNICODE取决于你是否定义了_UNICODE(下划线的意思是说明这个定义并不是标准,只是VC可以使用的)

7 楼

#include <windows.h>
#include <tchar.h>


int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                     LPSTR szCmdLine, int iCmdShow)
{
    TCHAR * p = _T("Hello!");   //注意是一条下划线
    MessageBox (NULL, p, _T("HelloMsg"), MB_OK | MB_DEFBUTTON2 | MB_ICONEXCLAMATION);
    return 0 ;
}
TCHAR.H中的第二种宏


#include <windows.h>
#include <tchar.h>





int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                     LPSTR szCmdLine, int iCmdShow)
{
    TCHAR * p = _TEXT("Hello!");   //注意是一条下划线
    MessageBox (NULL, p, _TEXT("HelloMsg"), MB_OK | MB_DEFBUTTON2 | MB_ICONEXCLAMATION);
    return 0 ;
}

这是第三种

8 楼

#include <windows.h>


int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                     LPSTR szCmdLine, int iCmdShow)
{
    TCHAR * p = __TEXT("Hello!");   //注意是两条下划线
    MessageBox (NULL, p, __TEXT("HelloMsg"), MB_OK | MB_DEFBUTTON2 | MB_ICONEXCLAMATION);
    return 0 ;
}
标准下的TCHAR和__TEXT宏

#include <windows.h>


int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                     LPSTR szCmdLine, int iCmdShow)
{
    TCHAR * p = __TEXT("Hello!");   
    MessageBox (NULL, p, TEXT("HelloMsg"), MB_OK | MB_DEFBUTTON2 | MB_ICONEXCLAMATION);
    return 0 ;
}
标准下的TEXT宏

是否用UNICODE取决于是否定义了 UNICODE(没有下划线)

我来回复

您尚未登录,请登录后再回复。点此登录或注册