我有以下函数引发异常:
procedure Test();
var
WinHttpReq: Variant;
begin
WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
try
WinHttpReq.Open('POST', 'https://tv.eurosport.com/', False);
WinHttpReq.SetRequestHeader('Content-Type', 'application/json');
WinHttpReq.Send('');
except
MsgBox(GetExceptionMessage, mbError, MB_OK);
end;
end;
而是在字符串GetExceptionMessage
中获取错误,我想以整数形式获取错误。
这可能吗?
答案 0 :(得分:1)
异常一般没有任何代码。因此,没有通用的方法从异常中检索代码。
在这种特殊情况下,异常基于OLE自动化错误,该错误具有代码。但是,当Inno Setup引发IDispatch
接口(OLE)的异常时,代码不会被保留。
您可以做的是使用IUnknown
界面。为此你需要:
IWinHttpRequest
CLSID_WinHttpRequest
CreateComObject
(而不是CreateOleObject
)实例化对象。Send
function Send(Body: Variant): HResult
方法
HResult
是否为12038(ERROR_INTERNET_SEC_CERT_CN_INVALID)。特别是第一步是一项庞大且容易出错的任务。
有关示例和详细信息,请参阅:
Examples\CodeAutomation2.iss
。如果您决定坚持使用错误消息进行比较,则可以尝试使用FormatMessage
function检索要与之比较的系统/本地化错误消息。请参阅How i can retrieve the error description for a WinInet error code from delphi。