Delphi - ErrorCode查询
技术交流,DH.
我们一般在调用了一些API后都会用GetLastError来获得错误信息,但是信息都是Integer的,我们知道是什么意思么?
嘿嘿,是的,有msdn呀,当然还可以用FormatMessage函数来.
正好看了下Windows核心编程第一章有个例子,来用Delphi试一下.
主要用了FormatMessage函数,具体用法和注意事项就很多了,大家可以看MSDN了.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | 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这些控件就可以了额.
来个图片看一下:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥