首页
学习
活动
专区
工具
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函数。

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

相关·内容

c++中template的用法是什么?

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

2.4K20
  • windows错误处理

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

    82820

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

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

    64120

    PHP中的=>->和::的用法

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

    24710

    Linux service、systemd的作用和用法是什么?

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

    1.5K20

    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编译器还提供了了错误代码查看工具.我们可以输入那么就会显示错误代码代表的什么意思.

    50220

    oracle中sequence是什么意思_consequence的用法

    在oracle中sequence就是序号,每次取的时候它会自动增加。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),cache中的sequence就会丢失....注::new 代表 数据改变后的新值,相对应的有 :old 原值 := 代表 赋值 :nextid表示引用sqlplus中定义的变量 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家

    93720

    css中的clear的作用是什么_css中class的用法

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

    1.5K10

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

    大家好,又见面了,我是你们的朋友全栈君。 出错情况:设备1和设备2分别使用COM1和COM2外界通信,在不关闭软件的情况下,调换串口(即设备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.7K10

    Java中static的含义和用法

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

    73420
    领券