zoukankan      html  css  js  c++  java
  • GetLastError来获得错误信息转成文本描述

    我们一般在调用了一些API后都会用GetLastError来获得错误信息,但是信息都是Integer的,我们知道是什么意思么?
    嘿嘿,是的,有msdn呀,当然还可以用FormatMessage函数来.
    正好看了下Windows核心编程第一章有个例子,来用Delphi试一下.
    主要用了FormatMessage函数,具体用法和注意事项就很多了,大家可以看MSDN了.

    Unit UtMain;
    
    Interface
    Uses
      Windows,
      Messages,
      SysUtils,
      Variants,
      Classes,
      Graphics,
      Controls,
      Forms,
      Dialogs,
      CxGraphics,
      CxControls,
      CxLookAndFeels,
      CxLookAndFeelPainters,
      CxContainer,
      CxEdit,
      DxSkinsCore,
      DxSkinSeven,
      CxGroupBox,
      CxCheckBox,
      CxTextEdit,
      DxSkinsForm,
      CxLabel,
      Menus,
      CxMemo,
      StdCtrls,
      CxButtons;
    
    Type
      TForm3 = Class(TForm)
        Cxlbl1: TcxLabel;
        DxSkinController1: TdxSkinController;
        CxtxtCode: TcxTextEdit;
        CxchkHex: TcxCheckBox;
        GrpDescription: TcxGroupBox;
        BtnSearch: TcxButton;
        CxmDescription: TcxMemo;
        Procedure BtnSearchClick(Sender: TObject);
        Procedure FormCreate(Sender: TObject);
      Private
        { Private declarations }
        DwCode: Cardinal;
        SystemLocale: Cardinal;
      Public
        { Public declarations }
      End;
    
    Var
      Form3: TForm3;
    Implementation
    
    {$R *.dfm}
    
    Procedure TForm3.BtnSearchClick(Sender: TObject);
    Var
      B: Cardinal;
      HLib: Cardinal;
      Buf: PChar;
    Begin
      If CxchkHex.Checked Then
        DwCode := StrToIntDef('$' + CxtxtCode.Text, 0)
      Else
        DwCode := StrToIntDef(CxtxtCode.Text, 0);
      GetMem(Buf, 256);
      Try
        // 尝试获取一下
        B := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, Nil, DwCode, SystemLocale,Buf, 255, Nil);
        // 如果默认没有 查询下网络相关的
        If B = 0 Then
        Begin
          HLib := LoadLibraryEx('netmsg.dll', 0, DONT_RESOLVE_DLL_REFERENCES);
          Try
            Assert(HLib <> 0);
            B := FormatMessage(FORMAT_MESSAGE_FROM_HMODULE, Pointer(HLib), DwCode,
              SystemLocale, Buf, 255, Nil);
          Finally
            If HLib <> 0 Then
              FreeLibrary(HLib);
          End;
        End;
        If (B <> 0) Then
          CxmDescription.Text := Buf
        Else
          CxmDescription.Text := '没有找到错误码的相关描述';
      Finally
        FreeMem(Buf);
      End;
    End;
    
    Procedure TForm3.FormCreate(Sender: TObject);
    Begin
      // 设置语言为默认
      SystemLocale := MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT)
    End;
    
    End.

    http://blog.csdn.net/yanjiaye520/article/details/6694510

  • 相关阅读:
    [leetcode-495-Teemo Attacking]
    [leetcode-413-Arithmetic Slices]
    document对象操作:浏览器页面文件
    搭建wamp环境,数据库基础知识
    jenkins配置邮箱服务器(126邮箱)
    Linux命令之文件与用户权限
    并发与同步、信号量与管程、生产者消费者问题
    TypeScript设计模式之职责链、状态
    了解HTML列表
    CSS画出的图
  • 原文地址:https://www.cnblogs.com/findumars/p/4999174.html
Copyright © 2011-2022 走看看