知识概要

(1) MAKELANGID

Windows宏,用一个来主语言标识和从语言标识创建一个语言标识符

    MAKELANGID(ushort usPrimaryLanguage, ushort usSubLanguage);

    usPrimaryLanguage:主要语言标识符,可以是一个预定于的值或一个用户定义的主要语言的值。对于一个用户定义的语言中,

          值范围0x0200到0x03FF,其他的留给系统

usSubLanguage:从语言标识符,可以是一个预定于的值或一个用户定义的主要语言的值。对于一个用户定义的语言中,值

                范围0x20到0x03F,其他的留给系统

Primary language identifier
Sublanguage identifier
Meaning
LANG_NEUTRAL
SUBLANG_NEUTRAL
Language neutral
LANG_NEUTRAL
SUBLANG_DEFAULT
User default language
LANG_NEUTRAL
SUBLANG_SYS_DEFAULT
System default language
LANG_NEUTRAL
SUBLANG_CUSTOM_DEFAULT
Windows Vista and later:Default custom locale
LANG_NEUTRAL
SUBLANG_CUSTOM_UNSPECIFIED
Windows Vista and later:Unspecified custom locale
LANG_NEUTRAL
SUBLANG_UI_CUSTOM_DEFAULT
Windows Vista and later:Default custom Multilingual User Interface locale
 
 (2) FormatMessage
        将GetLastError函数得到的错误信息转化为字符串信息
        参数说明:
        a. dwFlag
    

标志 标志说明
FORMAT_MESSAGE_ALLOCATE_BUFFER
函数会分配一个足够大的缓冲区保存格式化消息,并且通过lpBuffer指向该
地址。
FORMAT_MESSAGE_ARGUMENT_ARRAY
Arguments参数不是指向va_list结构体,但是是一个指向保存参数的数据。
FORMAT_MESSAGE_FROM_HMODULE
lpSource参数是需要去搜索的一个包含消息表的模块线程。如果lpSource
是NULL,当前进程的应用图像会被搜索,这个标志不能同FORMAT_ME
SSAGE_FROM_STRING使用。
FORMAT_MESSAGE_FROM_STRING
lpSource参数是一个指向以NULL结尾的字符串,字符串包含一个消息定义,
这个消息定义可以包含插入序列。此标志最好不要和FORMAT_MESSAGE_F
ROM_HMODULE或者FORMAT_MESSAGE_FROM_SYSTEM使用
FORMAT_MESSAGE_FROM_SYSTEM
0x00001000
函数会为了请求的信息而搜索系统的消息表资源。如果标志同时也指定了
FORMAT_MESSAGE_FROM_HMODULE,那么函数会先在lpSource指定
的模块中搜索请求的消息,如果搜索不到,就去搜索系统消息表资源。此
标志不能与FORMAT_MESSAGE_FROM_STRING使用。
FORMAT_MESSAGE_IGNORE_INSERTS
消息定义中的插入序列会被一直忽略和跳过直到输出缓冲区不改变,并且
Arguments会被忽略。
 
        b. lpSource:根据dwFlags标志而定
        c. dwMessageID:请求的消息标识符
        d. dwLanguageID:请求的语言标识符
        e. lpBuffer
        f. nSize
        g. Arguments:保存格式化信息中的插入值的一个数组
 
代码
      

    CString strErrorNo = "";
    GetDlgItem(IDC_ERRONUM_EDIT)->GetWindowText(strErrorNo);
    if (!strcmp(strErrorNo, ""))
    {
        // 请输入代码错误编号
        return;
    }

    int nNo = atoi(strErrorNo);
    DWORD dwLanguageID = MAKELANGID(LANG_NEUTRAL, LANG_NEUTRAL);
    ] = {};
    // HLOCAL hlocal;

    DWORD dwRet = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
                  NULL, nNo, dwLanguageID, (LPTSTR)cBuff, , NULL);

    if (dwRet)
    {
        //CString str = cBuff;
        char *p = (char *)*(int *)cBuff;
        SetDlgItemText(IDC_SHOWMSG_EDIT, p/*(LPCTSTR)LocalLock(hlocal)*/);
    }
 

Windows核心编程&错误处理的更多相关文章

  1. 《Windows核心编程》第一讲 对程序错误的处理

    一个Windows函数通常都有一个有意义的返回值类型,它标志着这个函数的运行状态,即函数运行成功与否.windows常用的函数类型如下图: 从系统内部来讲,当一个Windows函数检测到一个错误时,它 ...

  2. Windows核心编程第一章.错误处理

    Windows核心编程第一章,错误处理. 一丶错误处理 1.核心编程学习总结 不管是做逆向,开始做开发.在Windows下.你都需要看一下核心编程这本书.这本书确实写得很好.所以自己在学习这本书的同时 ...

  3. windows核心编程---第二章 字符和字符串处理

        使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是指UTF-16.也 ...

  4. 【windows核心编程】 第八章 用户模式下的线程同步

    Windows核心编程 第八章 用户模式下的线程同步 1. 线程之间通信发生在以下两种情况: ①    需要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性 ②    一个线程需要通知其他线程 ...

  5. 《windows核心编程系列》二谈谈ANSI和Unicode字符集 .

    http://blog.csdn.net/ithzhang/article/details/7916732转载请注明出处!! 第二章:字符和字符串处理 使用vc编程时项目-->属性-->常 ...

  6. 《windows核心编程系列》十八谈谈windows钩子

    windows应用程序是基于消息驱动的.各种应用程序对各种消息作出响应从而实现各种功能. windows钩子是windows消息处理机制的一个监视点,通过安装钩子能够达到监视指定窗体某种类型的消息的功 ...

  7. 《Windows核心编程》读书笔记 上

    [C++]<Windows核心编程>读书笔记 这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对 ...

  8. C++Windows核心编程读书笔记

    转自:http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%96%87/71405.shtml "C++Windows核心编程读书笔 ...

  9. windows核心编程 DLL技术 【转】

    注:本文章转载于网络,源地址为:http://blog.csdn.net/ithzhang/article/details/7051558 本篇文章将介绍DLL显式链接的过程和模块基地址重定位及模块绑 ...

随机推荐

  1. python 中文编码

    import sys sys.setdefaultencoding('utf-8') 保存为:sitecustomize.py 将文件放至: /Library/Frameworks/Python.fr ...

  2. asp.net mvc 记录Action耗时

    可能有些时候需要记录Action的执行时间来优化系统功能,这时可以用过滤器来实现. 新建项目 项目名称随便取 身份验证:不进行身份验证 安装Nlog 这里使用NLog来输出日志,具体使用说明请看:ht ...

  3. 【读书笔记】【深入理解ES6】#7-Set集合和Map集合

    ES6新标准中将Set集合和Map集合添加到JS中. ES5中Set集合和Map集合 在ES5中,开发者们用对象属性来模拟这两种集合. var set = Object.create(null); s ...

  4. 【CentOS】php编译安装gd库

    一.准备工作 使用之前服务器按源码最小化安装完nginx.php-fpm,没有安装gd库,下面介绍下gd库的安装. gd库是一个开源的图像处理库,它通过提供一系列用来处理图片的API,使其可以用来创建 ...

  5. 洛谷 P1177 【模板】快速排序【13种排序模版】

    P1177 [模板]快速排序 题目描述 利用快速排序算法将读入的N个数从小到大排序后输出. 快速排序是信息学竞赛的必备算法之一.对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成.( ...

  6. hihoCoder #1094 : Lost in the City(枚举,微软苏州校招笔试 12月27日 )

    #1094 : Lost in the City 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi gets lost in the city. He ...

  7. Codeforces Round #410 (Div. 2)(A,字符串,水坑,B,暴力枚举,C,思维题,D,区间贪心)

    A. Mike and palindrome time limit per test:2 seconds memory limit per test:256 megabytes input:stand ...

  8. CodeForces-2015 HIAST Collegiate Programming Contest-Gym-100952A.水题 100952B.水题 100952C.回文字符串 100952D.杨辉三角处理组合数 其他题目待续。。。

    哈哈哈哈哈哈哈,最近一直在补题,改各种错误的代码,wa了20多遍,改到心态爆炸,改好之后,感觉世界都美好了(叉会腰~)... A. Who is the winner? time limit per ...

  9. #if defined、#if !defined用法

    大型程序或者修改别人的程序时,当我们需要定义常量(源文件还是头文件 ),我们就必须返回检查原来此常量是否已经定义, if defined宏 就是用于检测的. 举个例子,如下: #define .... ...

  10. mitm6:通过IPv6攻破IPv4网络

    一.前言 虽然IPv6正在互联网上逐步推广,但在内部网络环境中使用IPv6的公司依然非常稀少.然而,大多数公司并不知道,即使他们没有主动去使用IPv6,但从Windows Vista以来,所有的Win ...