zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【Leetcode】23. Merge k Sorted Lists
    【Leetcode】109. Convert Sorted List to Binary Search Tree
    【Leetcode】142.Linked List Cycle II
    【Leetcode】143. Reorder List
    【Leetcode】147. Insertion Sort List
    【Leetcode】86. Partition List
    jenkins 配置安全邮件
    python 发送安全邮件
    phpstorm 同步远程服务器代码
    phpUnit 断言
  • 原文地址:https://www.cnblogs.com/huangjacky/p/1690282.html
Copyright © 2011-2022 走看看