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这些控件就可以了额.
来个图片看一下: