• Delphi ErrorCode查询


    技术交流,DH.

    我们一般在调用了一些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.

    我为了要dx的皮肤,所以这里用到了DevExpress控件,但是没有用到控件的其他功能,所以大家如果没有安装Dev,可以直接换成最普通的Button这些控件就可以了额.
    来个图片看一下:
    image

  • 相关阅读:
    灭霸-个人冲刺第四天
    单词统计
    第十周总结
    灭霸-个人冲刺第三天
    07-代码大全阅读笔记之一
    灭霸-个人冲刺第二天
    灭霸-个人冲刺第一天
    06-梦断代码阅读笔记之三
    团队项目-用户场景分析
    第九周总结
  • 原文地址:https://www.cnblogs.com/huangjacky/p/1690282.html
Copyright © 2020-2023  润新知