假設我有這個僞代碼DLL庫:GetLastError爲什麼在DLL庫中調用時返回0?
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
函數返回0,當它在一個DLL庫中使用如上所示?有沒有辦法得到這種情況下的最後一個錯誤代碼?
你會期望它是什麼? GetLastError返回Windows API函數生成的最後一個錯誤,並且只有一個插槽,因此Delphi異常處理系統可能對Windows API執行的操作可能會重置或更改該值。通常,與LastError的值相關的自定義異常將值包裝在自定義屬性中。 – 2013-03-15 17:25:08
您必須在API調用後立即調用它。你沒有這樣做。嘗試在失敗的CreateFile後立即執行此操作。底線是你的代碼無效。 – 2013-03-15 17:25:27