-
А вы пробовали? Ну и что же здесь неправильно?: procedure TForm1.Button8Click(Sender: TObject);
var Element: OleVariant;
begin
if Element<>nil then ShowMessage('OK');
end; >> [Error] Incompatible types
-
> nil соместим с любым ссылочным типом. вариант не ссылка, он структура 16 байт длинной, а ссылка только 4 байта (в 32 разрядной оси). + nil <> null см.прям тут sniknik © (29.09.12 11:54) [14]varEmpty = $0000;
varNull = $0001; будет портить последовательность.
-
для наглядности, не значение, а структура (иногда включает и значение) procedure TForm1.Button1Click(Sender: TObject);
var
v, iv, id: Variant;
i: IUnknown;
d: IDispatch;
function VarStrucToStr(v: Variant): string;
begin
result:= StringOfChar('@', 32);
BinToHex(@v, @result[1], 16);
end;
begin
iv:= i;
id:= d;
ShowMessage('Empty - '+VarStrucToStr(v)+' Null - '+VarStrucToStr(Null)+' IUnknown - '+VarStrucToStr(iv)+' IDispatch - '+VarStrucToStr(id)+#13#10+
'Byte - '+VarStrucToStr(5)+' ShortInt - '+VarStrucToStr(-5)+' ...');
end;
-
Спасибо! =) В общем через VarIsClear() работает как часы.
-
непонятно только почему > Пытался проверить на NULL этими функциями: VarIsEmpty(), VarIsNull() - без результатов. =( "без результатов". т.к. > Показывает $00000000, а толку? это оно и есть. а VarIsClear просто "более расширенная" вариация проверки нулевого значения для дополнительных типов... диспатч например, судя по > "EVariantTypeCastError -> Could not convert variant of type (Dispatch) into type (String)". должно быть оно... т.е типа $09000000
-
а... отладчик показывает "чисто значение", если не взять по дампу памяти.
-
Ваш пример показал что id == $09000000000000000000000000000000 А отладчик показывает id == $00000000 - он видимо откуда-то из "середины" кусок показывает. Может надо настроить где-то чтоб целиком показывал 16 байт?
-
Для моей поделки на TWebBrowser в принципе хватило условия на VarIsClear(Element), а есть ли смысл подобного (в общем случае)?:
if (VarIsClear(Element) or VarIsEmpty(Element) or VarIsNull(Element)) then ShowMessage('Error with "Element" #0011001') else ShowMessage(Element.innerText);
-
> а есть ли смысл подобного (в общем случае)?: в общем это вред без смысла, т.к. твое сообщение вообще не информативно, в отличие от ошибки полученной от обращения без проверки...
вон там смори sniknik © (29.09.12 11:54) [14] в VarIsClear есть Result := (VType = varEmpty) or то же что в VarIsEmpty, т.е дополнительная его проверка бессмысленна. это в частном.
-
Сообщение? Про "#0011001" чтоль? Так это я просто, для примеру, обработка отсутствия так сказать. =) А с VarIsEmpty это да, оплошал.. Будет думать ещё, спасибо вам огромное!
|