什么是“变体类型(错误)”?

时间:2013-06-20 09:29:30

标签: delphi ole

我有这段代码访问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;

我导致第一个数组输入失败(“+'fail'”),因为我想测试文档说的内容:
If an error occurs for getting a specific property, the Err value will be returned in the corresponding location in the returned array.

调用GetProperties后,根据检查器窗口,lValues [0]包含:错误(-2147221233)。

我试图找到一个带有此值的Windows命名常量,以便我可以对它进行测试(如果lValues [0]<> MagicalWindowsConst然后......),但我找不到它或其十六进制等效值FFFFFFFF8004010F(甚至不在Embarcadero源文件中)。

如果我让代码继续,lEvent.CustSyncTTID的整数赋值给出:
'无法将类型(错误)的变体转换为类型(整数)'

这表明存在一些'错误'变体类型???我也找不到。

我尝试定义const cErr = -2147221233const cErr : Int64 = -2147221233,但这会在if lValues[0] <> cErr上给出一个无效的变体操作错误。

我可以测试什么来确定数组元素是否返回错误代码?

1 个答案:

答案 0 :(得分:3)

我找到了它:

我可以测试if VarType(lValues[0]) <> varError

所以我显然忽略了is a varError type