Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2015.01.18;
Скачать: [xml.tar.bz2];

Вниз

Хитрости variant   Найти похожие ветки 

 
Пит   (2014-06-18 18:19) [0]

Вот создаю Excel Application стандартным COM-сервером... Почему, если писать так:

excel: variant;
...
s1 := excel.Cells[1,1];
if s1 <> "" then...


то все хорошо. Но если написать сразу:

if excel.Cells[1,1] <> "" then ...

то получаем: EVariantInvalidOpError with message "Invalid variant operation"


 
Dimka Maslov ©   (2014-06-18 18:31) [1]

Потому-что в первом случае мы сравниваем две строки, а во втором - неизвестно что с nil.


 
brother ©   (2014-06-18 18:34) [2]

> excel: variant;
> ...
> s1 := excel.Cells[1,1];
> if s1 <> "" then...

расшифровываю:
excel: не известно что
строка:= неизвестно что с приведением типа к строке
стравниваем 2 строки

> if excel.Cells[1,1] <> "" then ...

If неизветно что <> не известно с чем

:)


 
ВладОшин ©   (2014-06-18 19:00) [3]

Но если написать сразу:

if string(excel.Cells[1,1]) <> "" then ...
должно прокатить


 
brother ©   (2014-06-18 19:27) [4]

Удалено модератором


 
Пит   (2014-06-18 19:30) [5]


> а во втором - неизвестно что с nil.

почему с nil, если "" это явно пустая строка?


 
Dimka Maslov ©   (2014-06-18 19:39) [6]

Пустой может быть строка, под которую не выделена память nil, либо первым же символом которой идёт #0. Поэтому сравнение с "" эквивалентно if (Pointer(S) <> nil) and (S[1] <> #0).


 
Ega23 ©   (2014-06-18 19:40) [7]


> это явно пустая строка?


MessageBox(Handle, nil, "", MB_OK);


 
Пит   (2014-06-18 19:55) [8]

Удалено модератором


 
brother ©   (2014-06-18 20:17) [9]

Удалено модератором


 
имя   (2014-06-18 22:07) [10]

Удалено модератором


 
Ega23 ©   (2014-06-18 22:29) [11]


> то должно заработать? Завтра проверю...


Variant может быть и OLEVariant


 
Пит   (2014-06-19 00:04) [12]

Удалено модератором


 
ВладОшин ©   (2014-06-19 08:56) [13]

Удалено модератором


 
Пит   (2014-06-19 09:13) [14]

Удалено модератором


 
Ega23 ©   (2014-06-19 09:17) [15]

Удалено модератором


 
Пит   (2014-06-19 09:27) [16]

Удалено модератором


 
Ega23 ©   (2014-06-19 09:30) [17]

Удалено модератором


 
Пит   (2014-06-19 09:52) [18]

Удалено модератором


 
jack128_   (2014-06-19 10:17) [19]


> и в тоже время по твоей логике килограммам можно присвоить
> метры. И амперы.

в случае вариантов так и есть.

var
 V: Variant;
 S: string;
 Temp: boolean;
begin
 V := "строка";
 Temp := V = "строка"; // работает;

 V := 10;
 Temp := V = "строка"; // падает

 V := 10;
 S := V; // сравнивать со строкой не можем, а преобразовывать в неё - можем.
 Temp := S = "строка"; // работает
end;


 
Пит   (2014-06-19 10:21) [20]

Удалено модератором



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2015.01.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.003 c
15-1402811253
Библиарий
2014-06-15 09:47
2015.01.18
Как этот простой подход/паттерн/не знаю называется?


15-1403123402
Юрий
2014-06-19 00:30
2015.01.18
С днем рождения ! 19 июня 2014 четверг


15-1401985999
Alik
2014-06-05 20:33
2015.01.18
TComboBoxEx не показывает первую строчку


15-1403027983
oldman
2014-06-17 21:59
2015.01.18
Задачка (запамятовал, была ли на этом форуме)


15-1401961291
Minsk City
2014-06-05 13:41
2015.01.18
Delphi and C#





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский