2
只是爲了解釋一下背景下更聲明字符串,這是如何重現:如何獲得VBScript的錯誤
- 德爾福7(但也許更近的版本)中
- 導入類型庫「微軟的VBScript正則表達式5.5」
編寫程序解決此代碼:
var
re:RegExp;
try
re:=CoRegExp.Create;
re.Pattern:='(';//is an invalid regex, but see below
re.Test('');
except
on e:Exception do
Caption:=e.ClassName+' '+e.Message;
end;
這將拋出異常EOleError OLE error 800A139C
它這樣做是因爲SysErrorMessage在此代碼上返回一個空字符串,並且EOleSysError構造函數默認爲SOleError資源字符串以返回某些內容。
是否有一個winapi替代SysErrorMessage來獲得更好的錯誤描述?如果我谷歌了一下,代碼確實代表'缺少括號'的錯誤,但是如果有一種方法我可以從系統獲得(本地化)描述,我寧願使用它,而不必添加枚舉錯誤描述常量到我的項目。
這完全取決於COM對象的實現。並不是所有的COM對象都支持'IErrorInfo'接口,但很多都可以。如果使用'safecall'調用約定調用COM對象方法,則Delphi會自動調用'GetErrorInfo()'並引發一個'EOleException',其中包含來自'IErrorInfo'的額外錯誤值。 – 2012-04-05 23:52:05
我調試過並且ComObj.pas'SafeCallError確實調用了GetErrorInfo,但不返回S_OK。我特別要求VBScript_RegExp_55_TLB,但現在看起來它不支持IErrorInfo。我的問題仍然是一個體面的答案,所以我會接受。 – 2012-04-09 20:14:48