zoukankan      html  css  js  c++  java
  • 错误代码和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(...);

           

  • 相关阅读:
    文件上传漏洞全面渗透姿势总结
    注册frpc为windows服务,可在未登录用户时启动
    SpringIOC 容器注入方式
    如何交换 Integer 的值?
    分布式websocket服务器
    win10安装Hbase2.3.0
    hadoop常用的命令
    win10安装kafka 2.122.8.1
    win10激活码
    win10 flume source为spooldir,输出到hdfs
  • 原文地址:https://www.cnblogs.com/zhangdewang/p/7767040.html
Copyright © 2011-2022 走看看