编写符合aisi和unicode的应用程序

Posted on 2008-03-08 15:02  少林  阅读(838)  评论(1编辑  收藏  举报
一,   为了编写编写符合aisi和unicode的应用程序,应该遵循以下原则:
    1.将文本串视为字符数组,而不是chars数组或字节数组.
    2.将通用数据类型(如TCHAR和PTSTR)用于文本字符和字符串.
    3.将显示数据类型(如BYTE 和 PBYTE)用于字节,字节指针和数据缓存.
    4.将TEXT宏用于原义字符和字符串.
    5.执行全局性替换(例如用PTSTR替换PSTR).
    6.修改字符串运算问题.例如函数通常希望你在字符中传递一个缓存的大小,而不是字节.这意味着你不应该传递sizeof(szbuffer),而应该传递(sizeof(szbuffer)/sizeof(tchar)).
二,确定文本是ansi文本还是unicode文本
    IsTextUnicode函数能够帮助进行这种区分:
    DWORD IsTextUnicode(CONST PVOID pvBuffer,int cb,PINT pResult);
    isTextUnicode使用一系列统计方法和定性方法,以便猜测缓存的内容.由于这不是一个确切的科学方法,因此IsTextUnicode有可能返回不正确的结果.
    第一个参数pvBuffer用语表使要测试的缓存地址.该数据是个无效指针,因为你不知道你拥有的是ansi字符数组还是unicode的字符数组.
    第二个参数cb设定pvBuffer指向的字节数,同样,由于你不知道缓存中放的是什么,隐蔽cb是个字节数,而不是字符数.
  第三个pResult是个证书的地址,必须在调用IsTextUnicode之前对他进行初始化,对该证书进行初始化后,就可以指明你要IsTextUnicode执行那些测试.也可以为该参数传递NULL,在这种情况下,IsTextUnicode将执行他能够进行的所有测试.
    如果IsTextUnicode认为缓存中包含Unicode文本,将返回TRUE,否则将返回FALSE.
三,unicode 和ANSI之间的转换
    int MultiByteToWideChar函数,原形如下:
    int MultiByteToWideChar(UINT uCodePage,DWORD dwFlags,PCSTR pMultibyteStr,int cchMultiByte,
    PWSTR pWideCharStr,int ccWideChar);
    uCodePage参数用于标识一个与多字节字符串相关的代码页号.dwflags参数用于设定另一个控件,他可以用重音种类的区分来影响字符.这些标记通常并不使用,在dwflags参数中传递0.pmultibytestr参数用于要转换的字符串,ccbmultibyte参数用语指明该字符的长度.转换后产生的UNICODE字符串将被写入内存中的缓存,起地址由pWideCharStr参数指明.必须在cchwidechar参数设定该缓存的最大值.
    函数 int WideCharToMultiByte(
    UINT uCodePage,
    DWORD dwFlags,
    PCWSTR pWideChar,
    int cchWideChar,
    PSTR pMultiByteStr,
    int cchMultiByte,
    PCSTR pDefaultChar,
    PBOOL pfUsedDefaultChar
    );
    参数说明与int MultiByteToWideChar大体相同.

Copyright © 2024 少林
Powered by .NET 8.0 on Kubernetes