美文网首页
Windows核心编程 Unicode

Windows核心编程 Unicode

作者: lindyang | 来源:发表于2023-04-18 16:24 被阅读0次

    _mbslen ,它可以用来操作多字节(既包括单字节也包括双字节)字符串
    wchar_t <string.h>
    ANSI C 后来添加了 wcschr, wcscpy, wcscmp, wcslen,
    只需用前缀wcs来取代ANSI字符串函数的前缀str即可.

    Microsoft 提供的c运行时库和 ANSI 是一致的,即使在 Win98 上也支持 Unicode.

    <tchar.h> 比 <string.h> 更佳, <tchar.h> 受 _UNICODE 影响

    _tcscpy = strcpy/wcscpy
    TCHAR = char/wchar_t

    TCHAR *szError = "Error"; // 有 #ifdef _UNICODE 则会报错
    L ## x 是告诉编译器该字符串应该作为 Unicode 字符串来编译

    _TEXT, TEXT

    <winnt.h>:
    typedef char CHAR;
    typedef CHAR *PSTR;
    typedef CONST CHAR *PCSTR;

    typedef wchar_t     WCHAR;
    typedef WCHAR       *PWSTR;
    typedef CONST WCHAR *PCWSTR;
    
    PTSTR, PCTSTR 是 ASCII/UNICODE 字符指针
    

    _UNICODE宏用于C运行期头文件,而UNICODE宏则用于Windows头文件

    在Windows2000下,Microsoft的CreateWindowExA源代码只不过是一个形实替换程序层或
    翻译层,用于分配内存,以便将ANSI字符串转换成Unicode字符串。该代码然后调用Create
    WindowExW,并传递转换后的字符串。当CreateWindowExW返回时,CreateWindowExA便释
    放它的内存缓存,并将窗口句柄返回给你。

    在Windows98下,Microsoft的CreateWindowExA源代码是执行操作的函数。Windows98
    提供了接受Unicode参数的所有Windows函数的进入点,但是这些函数并不将Unicode字符串转
    换成ANSI字符串,它们只返回运行失败的消息。
    调用GetLastError将返回ERROR_CALL_NOT_IMPLEMENTED。

    摒弃16位的仅支持ASCII的 WinExec 和 OpenFile,
    拥抱 CreateProcess 和 CreateFile。

    Windows 字符串函数
    <ShlWApi.h>, 是操作系统的一部分
    StrCat, StrChr, StrCmp, StrCpy
    StrCatA, StrCatW
    <WinBase.h>, 既可以ANSI,也可以UNICODE
    lstrcat
    lstrcmp
    lstrcmpi
    lstrcpy
    lstrlen
    C运行时没有为Unicode提供很好的支持,tolower,toupper只支持ANSI,
    建议使用 Windows 函数 CharLower, CharUpper, CharLowerBuffer, CharUpperBuff.
    考虑用户使用的语言 IsCharAlpha, IsCharAlphaNumric, IsCharLower, IsCharUpper.

    Microsoft公司已经给C运行期的printf函数家族增加了一些特殊的域类型.
    

    规范
    TCHAR/PTSTR
    BYTE/PBYTE
    TEXT 字符串常量
    传递缓存大小: sizeof(szBuffer)/sizeof(TCHAR)
    malloc(nCharacters * sizeof(TCHAR))

    资源是 Unicode

    相关文章

      网友评论

          本文标题:Windows核心编程 Unicode

          本文链接:https://www.haomeiwen.com/subject/nvahjdtx.html