【发布时间】:2013-03-04 12:31:34
【问题描述】:
假设我有一个带有这个伪代码的 DLL 库:
var
LastError: DWORD;
procedure DoSomethingWrong; stdcall;
var
FileStream: TFileStream;
begin
try
FileStream := TFileStream.Create('?', fmCreate);
except
on EFCreateError do
LastError := GetLastError; // <- why does GetLastError return 0 here ?
end;
end;
为什么GetLastError 函数在如上所示的DLL 库中使用时返回0?有没有办法获得这种情况下的最后一个错误代码?
【问题讨论】:
-
您希望它是什么? GetLastError 返回 Windows API 函数生成的最后一个错误,并且只有一个插槽,因此 Delphi 异常处理系统可能对 Windows API 执行的任何操作都可能重置或更改该值。通常,与 LastError 的值相关的自定义异常会将值包装在自定义属性中。
-
您必须在 API 调用后立即调用它。你没有那样做。尝试在 CreateFile 失败后立即执行此操作。底线是您的代码无效。
标签: delphi delphi-2009