首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Delphi中GetLastError和FormatMessage的正确用法是什么?

在Delphi中,GetLastErrorFormatMessage是用于获取和格式化错误消息的两个重要函数。以下是它们的正确用法:

  1. GetLastError

GetLastError函数用于获取当前线程的错误代码。当一个Windows API函数调用失败时,可以使用GetLastError函数来获取错误代码。错误代码是一个整数值,表示发生的错误类型。

代码语言:delphi
复制
function GetLastError: DWORD; stdcall;
  1. FormatMessage

FormatMessage函数用于将错误代码转换为可读的错误消息。它接受一个错误代码作为输入,并返回一个包含错误消息的字符串。

代码语言:delphi
复制
function FormatMessage(dwFlags: DWORD; lpSource: LPCVOID; dwMessageId: DWORD; dwLanguageId: DWORD; lpBuffer: LPVOID; nSize: DWORD; Arguments: Pointer): DWORD; stdcall;

正确用法示例:

代码语言:delphi
复制
uses
  Windows, SysUtils;

function GetLastErrorMessage: string;
var
  dwError: DWORD;
  sMessage: array[0..255] of Char;
begin
  dwError := GetLastError;
  if FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_IGNORE_INSERTS or FORMAT_MESSAGE_MAX_WIDTH_MASK or FORMAT_MESSAGE_ARGUMENT_ARRAY, nil, dwError, 0, @sMessage, SizeOf(sMessage), nil) <> 0 then
    Result := sMessage
  else
    Result := 'Unknown error';
end;

在这个示例中,GetLastErrorMessage函数首先调用GetLastError函数获取错误代码,然后使用FormatMessage函数将错误代码转换为可读的错误消息。最后,函数返回错误消息字符串。

注意:在使用GetLastErrorFormatMessage函数时,需要确保在调用它们之前已经调用过Windows API函数,并且该函数的返回值表示失败。如果没有调用Windows API函数或函数调用成功,GetLastError函数将返回错误代码0,这时不应该调用FormatMessage函数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用FormatMessage函数编写一个内核错误码查看器

在编写驱动程序时候,常用一个结构是NTSTATUS,它来表示操作是否成功,但是对于失败情况它返回码过多,不可能记住所有的情况,应用层有一个GetLastError函数,根据这个函数返回值可以通过错误查看器来查看具体错误原因...终于皇天不负有心人,我在微软官网上找到了FormatMessage说明,自己实现了这个功能,现在讲这个部分记录下来,以供大家参考 void CNTLookErrorDlg::OnBnClickedBtnLookup...LocalFree( lpMessageBuffer ); FreeLibrary(Hand); } 这是用mfc写一段代码,首先加载NTDLL.dll文件,然后调用FormatMessage...,第一个参数需要新加入FORMAT_MESSAGE_FROM_HMODULE表示需要从某个模块取出错误码具体字符串之间对应关系,然后将第二个参数传入dll句柄,这个dll记录了内核错误码对应字符串信息...如果不加这个标志,那么默认从系统获取,也就是获取应用层GetLastError返回信息与错误字符串对应关系。 有了这个信息,剩下就交给FormatMessage来进行格式化啦。

57620

c++template用法是什么

下文由ChatGPT生成 在C++,template是一种通用编程工具,用于创建通用函数或类。通过使用模板,可以编写可以应用于不同数据类型函数或类,从而实现代码重用性灵活性。...通过定义函数参数类型为模板参数,可以在函数调用时根据实际参数类型来推断模板参数类型。...类模板(Class Templates) 类模板允许定义通用类,可以在不同数据类型上进行实例化。与函数模板类似,通过在类中使用模板参数,可以在类成员函数成员变量中使用通用类型。...Stack 类可以存储不同类型元素,并提供入栈出栈操作。...可以通过函数模板类模板来实现通用编程,而模板特化提供了对特定类型自定义实现。

19920

windows错误处理

在windows为每个线程准备了一个存储区,专门用来存储当前API执行错误码,想要获取这个错误码可以通过函数GetLastError。...在这需要注意是当前API执行返回错误码会覆盖之前API返回错误码,所以在调用API结束后需要立马调用GetLastError来获取该函数返回错误码。...但是windows错误码实在太多,有的时候错误码并不直观,windows为每个错误码都关联了一个错误信息文本,想要通过错误码获取对应文本信息,可以通过函数FormatMessage来获取。...C标准库printf,而是使用了windows自带控制台函数WriteConsole,为了简单,我们定义了一个宏,用来输出字符串。...程序首先以打开已存在文件方式打开一个文件,由于这个文件并不存在,所以函数出错,我们通过GetLastError获取错误码,然后通过FormatMessage来进行转化,该函数原型如下: DWORD FormatMessage

77220

PHP=>->::用法

PHP=>->以及::符号用法 ->用法 插入式解引用操作符 用于类里,访问类里函数或对象,就是在类里面定义了一个函数,使用->可以调用这个类里面的函数 <?...,$css['color']='green'; 综上,=>作用就是用来给数组值赋值 $arr=array('one' => 1); array['one'] = 1; ::用法 双冒号操作符...,即作用域限定操作符,可以访问静态,const,类重写属性方法 用变量在类定义外部访问 class fruit{ const CONST_VALUE = 'fruit color'; } $classname...> 面向对象selfparent区别 <?...demo(); 相同点:selfparent都是调用父类属性或者方法 不同点:如果两个属性一样,假如都叫$name ,那么self::调用是自己类,parent::则是调用父类 php

12410

Linux service、systemd作用用法是什么

service命令 service 命令是Redhat Linux兼容发行版中用来控制系统服务实用工具,它以启动、停止、重新启动关闭系统服务,还可以显示所有系统服务的当前状态。...service运行指定服务(称之为System V初始脚本)时,把大部分环境变量去掉了,只保留LANGTERM两个环境变量,并且把当前路径置为/,也就是说是在一个可以预测非常干净环境运行服务脚本...这种脚本保存在/etc/init.d目录,它至少要支持startstop命令。...$ ntsysv 2.service不足 历史上,Linux 启动一直采用init进程。...Systemd 就是为了解决这些问题而诞生。它设计目标是,为系统启动管理提供一套完整解决方案。根据 Linux 惯例,字母d是守护进程(daemon)缩写。

1.4K20

Windows核心编程第一章.错误处理

HANDLE Windows句柄类型.返回值同创为NULL.否则的话HANDLE将标识一个可以操纵对象.有些函数会返回INVALID_HANDLE_VALUE来表示 具体要查看MSDN文档看看对函数返回值要求...函数名称/圆形 作用 DWORD WINAPI GetLastError(void) 返回值: 返回调用线程之后错误代码调用成功则返回ERROR_SUCESS void WINAPI SetLastError...( _In_ DWORD dwErrCode ); 传入一个DWORD错误值进行设置 DWORD FormatMessage( DWORD dwFlags, LPCVOID lpSource..., DWORD dwMessageId, DWORD dwLanguageId, LPTSTR lpBuffer, DWORD nSize, va_list *Arguments ); 根据GetlastError...MSDN上有介绍GetLastError配合ForMatMessage来打印错误代码. 5.错误代码查找工具使用 VS编译器还提供了了错误代码查看工具.我们可以输入那么就会显示错误代码代表什么意思.

47420

oraclesequence是什么意思_consequence用法

在oraclesequence就是序号,每次取时候它会自动增加。sequence与表没有关系。...、snapshot、VIEW SELECT 语句 – INSERT语句子查询 – INSERT语句values – UPDATE SET 如在插入语句中 sql;”> insert into...表名(id,name)values(seqtest.Nextval,’sequence 插入测试’); 注: – 第一次NEXTVAL返回是初始值;随后NEXTVAL会自动增加你定义INCREMENT...使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cachesequence就会丢失....注::new 代表 数据改变后新值,相对应有 :old 原值 := 代表 赋值 :nextid表示引用sqlplus定义变量 以上就是本文全部内容,希望对大家学习有所帮助,也希望大家多多支持编程之家

87920

cssclear作用是什么_cssclass用法

使用 clear 属性往文本添加图片廊: clear属性值: left 清除该元素 左边浮动元素。...left right both none inherit 1 二、clear应用场景 ①Float 往往是用于图像,就像是办公软件word文字坏绕图片方式设置,...那么clear就是让脱离元素回归到正常文档流。...这个怎么就不正确了呢?没有按照理解来了呢? 难道是因为555,666是离开太远了,影响不到?下面来一个box4-5是进跟在box4后面的, 代码: <!...屁列,说法一样不对,下面的一个例子box3出现可以清除是可以理解,box4加载在最后面怎么也可以清除了? !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

1.4K10

CreateFile()打开串口失败,返回句柄值为0xffffffff

大家好,又见面了,我是你们朋友全栈君。 出错情况:设备1设备2分别使用COM1COM2外界通信,在不关闭软件情况下,调换串口(即设备1/2,分别使用COM2/1),此时出错?..., FILE_FLAG_OVERLAPPED, NULL ); 打开串口,执行到这里时,_hCommHandle值为INVALID_HANDLE_VALUE(0xffff ffff),根据函数帮助文件知道可以利用...GetLastError()获取出错原因,如下: ///查找错误 DWORD erM=0; LPVOID lpMsgBuf; CString theErr; if(_hCommHandle==INVALID_HANDLE_VALUE...) erM=GetLastError(); FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,...解决办法:每次使用完串口后,将其关闭,再次使用时(针对串口互换这种情况),就不会出错了。

2.3K10

Javastatic含义用法

大家好,又见面了,我是你们朋友全栈君。...static:静态,用于修饰成员(成员变量,成员方法); 1.被static所修饰变量或者方法会储存在数据共享区; 2.被static修饰后成员变量只有一份!....被所有对象共享; 5.被static修饰变量成为静态变量(类变量)或者实例变量; 6.存放位置 1.类变量随着类加载而存在于date内存区; 2.实例变量随着对象建立而存在于堆内存; 7.生命周期...: 1.类变量周期生命最长,随着类消失而消失; 2.实例变量生命周期比类变量短,它是随着对象消失而消失; 8.方法注意事项: 1.静态方法只能访问静态成员; 2.非静态得方法即能访问静态得成员...(成员变量,成员方法)又能访问非静态得成员; 3.局部变量不能被static修饰; 4.静态得方法是不可以定义this、super关键字,因为静态优先于对象存在,所以静态方法不可以出this;

49220
领券