2013-06-20 58 views
2

我有這個代碼的工作件訪問一個Outlook AppointmentItem.PropertyAccessor.GetProperties方法:什麼是「類型(錯誤)的變體」?

var 
    lPropertyAccessor: OLEVariant; 
    lDT    : TDateTime; 
    lSchemas, lValues: Variant; 

lPropertyAccessor := AAppointmentItem.PropertyAccessor; 
lSchemas := VarArrayOf([cPublicStringNameSpace + PROPERTY_TIMETELLID + 'fail', 
         cPublicStringNameSpace + PROPERTY_TIMETELLSYNCTIME, 
         cPublicStringNameSpace + PROPERTY_TIMETELLSYNCID]); 
try 
    lValues := lPropertyAccessor.GetProperties(lSchemas); 
    lEvent.CustSyncTTID := lValues[0]; 
    lDT := lValues[1]; 
    lDT := TTimeZone.Local.ToLocalTime(lDT); 
    lEvent.CustSyncDate := lDT; 
    lEvent.CustSyncEntryID := lValues[2]; 
except 
end; 

我造成這種失敗的第一個數組條目(「+‘失敗’」),因爲我想測試一下文檔說:
If an error occurs for getting a specific property, the Err value will be returned in the corresponding location in the returned array.

調用的GetProperties,根據檢查員窗口後,左值[0]包含:錯誤(-2147221233)。

我試圖找到一個Windows命名,這個值不變,這樣我可以對照它(如果左值[0] <> MagicalWindowsConst然後...),但我不能找到它或它的hex等值FFFFFFFF8004010F (甚至在Embarcadero源文件中也沒有)。

如果我讓代碼繼續,對於lEvent.CustSyncTTID整數分配給:
「無法轉換類型(錯誤)的變體進入類型(Integer)」

那就表明有一些「錯誤'變種?我也找不到那個。

我試着定義了const cErr = -2147221233const cErr : Int64 = -2147221233,但是在if lValues[0] <> cErr上給我一個無效的變體操作錯誤。

我可以測試什麼來確定數組元素是否返回錯誤代碼?

+1

如果我們打破了'HRESULT'我們看到領先'8'表示失敗,' SEVERITY_ERROR',設施是'4','FACILITY_ITF',代碼是'0x010F'。 'FACILITY_ITF'表示「錯誤的實際含義是由接口定義的,也就是說,從兩個不同接口返回的完全相同的32位值的兩個HRESULT可能有不同的含義。」您正在使用Outlook,並且Outlook中的錯誤是「Outlook數據文件無法訪問」。 –

回答

2

我發現:

我可以測試if VarType(lValues[0]) <> varError

所以我明顯忽略,有is a varError type

+0

FWIW,還有[VarIsError](http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/[email protected]) –

相關問題