2012-04-05 34 views
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來獲得更好的錯誤描述?如果我谷歌了一下,代碼確實代表'缺少括號'的錯誤,但是如果有一種方法我可以從系統獲得(本地化)描述,我寧願使用它,而不必添加枚舉錯誤描述常量到我的項目。

回答

2

這是一個COM error。要獲得文字說明,請致電GetErrorInfo,然後IErrorInfo.GetDescription。但是如果你沒有得到任何有用的東西,請不要感到驚訝。

+0

這完全取決於COM對象的實現。並不是所有的COM對象都支持'IErrorInfo'接口,但很多都可以。如果使用'safecall'調用約定調用COM對象方法,則Delphi會自動調用'GetErrorInfo()'並引發一個'EOleException',其中包含來自'IErrorInfo'的額外錯誤值。 – 2012-04-05 23:52:05

+0

我調試過並且ComObj.pas'SafeCallError確實調用了GetErrorInfo,但不返回S_OK。我特別要求VBScript_RegExp_55_TLB,但現在看起來它不支持IErrorInfo。我的問題仍然是一個體面的答案,所以我會接受。 – 2012-04-09 20:14:48