zoukankan      html  css  js  c++  java
  • FormatMessage函数

    我们写程序,调试出错时用的一个重要函数是 GetLastError(),它会返回一个非负数字给我们,在VS的工具--错误查找里面看相应的描述。

    今天看《Windows核心编程》时,发现一个FormatMessage函数,能够自动将错误代码转换成汉语或英语描述,所以参考书上的例子,自己实现了一下。

    也可以把其中的子函数嵌入其他程序中,出错的时候,直接调用自己写的函数,不用再去工具里面查看了。

    这是函数原型

    DWORD
    WINAPI
    FormatMessageW(
        _In_     DWORD dwFlags,
        _In_opt_ LPCVOID lpSource,
        _In_     DWORD dwMessageId,
        _In_     DWORD dwLanguageId,
        _Out_    LPWSTR lpBuffer,
        _In_     DWORD nSize,
        _In_opt_ va_list *Arguments
        );
    

      代码是一些死知识,没有什么需要理解的地方,记录下来就行了。

    #include "stdafx.h"
    
    #include <Windows.h>
    #include <iostream>
    using namespace std;
    
    void Search();
    
    int main()
    {
    	setlocale(LC_ALL, "Chinese-simplified");  //汉语显示
    	Search();
    	return 0;
    }
    
    
    void Search()
    {
    	DWORD dwError = 0;
    	printf("请输入要查找的错误号码:
    ");
    	cin >> dwError;
    	HANDLE LocaleHandle = NULL;   
    
    	// MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL)          汉语
            // MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)       英语
    	DWORD LocaleSystem = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);  
    
    	//   获得文本描述
    	//   typedef int  BOOL;
    	BOOL bOk = FormatMessage(
    		FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ALLOCATE_BUFFER,
    		NULL, dwError, LocaleSystem,
    		(PTSTR)&LocaleHandle, 0, NULL);
    
    	if (!bOk)
    	{
    		// 可能是网络错误
    		HMODULE hDll = LoadLibraryEx(TEXT("netmsg.dll"), NULL, DONT_RESOLVE_DLL_REFERENCES);
    
    		if (hDll != NULL)
    		{
    			bOk = FormatMessage(
    				FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS |
    				FORMAT_MESSAGE_ALLOCATE_BUFFER,
    				hDll, dwError, LocaleSystem,
    				(PTSTR)&LocaleHandle, 0, NULL);
    			FreeLibrary(hDll);
    		}
    	}
    
    	if (bOk && (LocaleHandle != NULL))
    	{
    		LPVOID v1 = LocalLock(LocaleHandle);
    		printf("错误类型描述: %ls
    ", v1);
    
    		LocalFree(LocaleHandle);
    	}
    	else
    	{
    		MessageBox(0, L"No text found for this error number.", 0, 0);
    	}
    }
    

      

  • 相关阅读:
    jQuery入门(8):工具
    jQuery入门(2):核心(核心函数,对象访问,多库共存)
    jQuery入门(6):Ajax
    jQuery入门(7):效果
    jQuery入门(4):CSS相关API
    threadwait/sleep
    【转】Query的extend扩展方法使用点滴
    jquery.query2.1.7.js 操作url
    zhuan
    通用分页存储过程 采用ROW_NUMBER(),支持2005及以后的版本
  • 原文地址:https://www.cnblogs.com/kekoukele987/p/7543469.html
Copyright © 2011-2022 走看看