错误代码和UNICODE编程

程序错误处理

一般错误返回的数据类型有VOID BOOL HANDLE PVOID LONG/DWORD 返回值哪些代表成功和错误需查文档

错误码和解释存放在WinError.h中

使用GetLastError()获取线程最后的错误信息

将错误码转换成文本描述使用函数 :

DWORD FormatMessage(

       DWORD   dwFlags,

       LPCVOID pSource,

       DWORD   dwMessageId,

       DWORD   dwLanguageId,

       PTSTR   pszBuffer,

       DWORD   nSize,

       va_list *Arguments);

定义自己错误的代码使用函数:ps.也可以使用这种模式定义成功的代码提示.

关于错误代码域的定义 请查资料

VOID SetLastError(DWORD dwErrCode);

使用Unicode编码编程能提高程序的效率,因为不需要使用内存进行编码转换

UNICODE使用c运行期库中的String.h  -> typedef unsigned short wchar_t;

       如果想放99个UNICODE字符和一个结尾为0的字符 wchar_t szBuffer[100]

       c运行时库中的strcpy,strchr,strcat不能处理UNICODE,使用wcscpy,wcschr,wcscat

       所有UNICODE函数以wcs开头,ANSI的是str

       **如果想代码通用UNICODE和ANSI ,使用TCHAR.h中定义的宏

       字符串前要加L,表明是UNICODE的字符串 使用TEXT()宏可以解决这个问题,他来转换

       宏使用_下划线开头的是在C运行期的头文件里定义的,没有事在WIndows头文件中定义的

      

使用操作字符串函数时最好使用操作系统的字符串操作函数,而不是c运行期字符串函数.这样性能好

       遵循的原则:

                #将文本串视为字符数组,而不是chars数组或字节数组

                #将通用数据类型(TCHAR,PTSTR)用于文本字符和字符串

                #将显式数据类型(如BYTE,PBYTE)用于字节,字节指针和数据缓存

                #将TEXT宏用于定义原义字符和字符串

                #执行全局性替换(例如使用PTSTR替换PSTR)

                #修改字符串预算问题.

                          #计算缓存大小使用sizeof(szBuffer)/sizeof(TCHAR)而不是sizeof(szBuffer)

                          #分配内存使用 malloc(n*sizeof(TCHAR))而不是malloc(n)

      

       windows提供的字符串函数,都是使用宏实现的

                lstrcat                将一个字符串置于另一个字符串的结尾处

                lstrcmp              对两个字符串进行区分大小写的比较

                lstrcmpi   对两个字符串进行不区分大小写的比较

                lstrcpy               将一个字符串拷贝到内存中的另一个位置

                lstrlen                返回字符串的长度(按照字符数来计算)

       windows中支持UNICODE和ANSI字符和字符串转换的函数:

                PTSTR       CharLower(PTSTR pszString);

                PTSTR       CharUpper(PTSTR pszString);

       windows用于转换缓存中包含的字符:

                DWORD CharLowerBuff(PTSTR pszString, DWORD cchString);

                DWORD CharUpperBuff(PTSTR pszString, DWORD cchString);

       windows中字符大小写数字的判断函数:

                BOOL        IsCharAlpha(TCHAR ch);

                BOOL        IsCharAlphaNumeric(TCHAR ch);

                BOOL       IsCharLower(TCHAR ch);

                BOOL       IsCharUpper(TCHAR ch);

       从资源里加载字符串资源:  

                LoadString(...);

       判断是否包含Unicode字符:

       isTextUnicode(CONST PVOID pvBuffer, int cb, PINT pResult);

       在Unicode和ANSI之间转换字符串:

       int MultiByteToWideChar(UINT uCodePage,

                                                               DWORD dwFlags,

                                                               PCSTR pMultiByteStr,

                                                               int cchMultiByte,

                                                               PWSTR pWideCharStr,

                                                               int cchWideChar);

       int WideCharToMultiByte(...);

 

       

posted @ 2017-11-01 16:13  在左手  阅读(438)  评论(0编辑  收藏  举报