2013-06-20 6 views
2

У меня есть эта рабочая часть кода доступа к Перспективы 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, в соответствии с окном инспектора, lValues ​​[0] содержит: Error (-2147221233).

Я попытался найти Windows с константой с этим значением, чтобы я мог протестировать ее (если lValues ​​[0] <> MagicalWindowsConst then ...), но я не могу найти его или его шестиугольный эквивалент FFFFFFFF8004010F (даже в исходных файлах Embarcadero).

Если я позволю код продолжать, целое задание на lEvent.CustSyncTTID дает:
«Не удалось преобразовать вариант типа (Error) в тип (Integer)»

Это было бы предположить, есть некоторые «ошибки 'вариантный тип ??? Я тоже не могу этого найти.

Я пробовал определять const cErr = -2147221233 или const cErr : Int64 = -2147221233, но это дает мне ошибку Недействительного варианта операции на if lValues[0] <> cErr.

Что я могу проверить, чтобы определить, возвращает ли элемент массива код ошибки?

+1

Если разбить 'HRESULT' мы видим, что ведущий' 8' указывает на ошибку, ' SEVERITY_ERROR', объект - '4',' FACILITY_ITF', а код - '0x010F'. «FACILITY_ITF» означает «Фактический смысл ошибки определяется интерфейсом. То есть два HRESULT с точно таким же 32-битным значением, возвращаемым с двух разных интерфейсов, могут иметь разные значения». Вы используете 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]) –

Смежные вопросы