我有這個代碼的工作件訪問一個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 = -2147221233
或const cErr : Int64 = -2147221233
,但是在if lValues[0] <> cErr
上給我一個無效的變體操作錯誤。
我可以測試什麼來確定數組元素是否返回錯誤代碼?
如果我們打破了'HRESULT'我們看到領先'8'表示失敗,' SEVERITY_ERROR',設施是'4','FACILITY_ITF',代碼是'0x010F'。 'FACILITY_ITF'表示「錯誤的實際含義是由接口定義的,也就是說,從兩個不同接口返回的完全相同的32位值的兩個HRESULT可能有不同的含義。」您正在使用Outlook,並且Outlook中的錯誤是「Outlook數據文件無法訪問」。 –