Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Variant


Страницы:   1 2

Ega23 ©   (2004-12-28 10:43:00) 

Как переменную типа Variant привести к varEmpty? Причём не к varNull, а именно к varEmpty?


Sandman25   (2004-12-29 10:36:00) [1]

[22] Ega23 ©   (29.12.04 10:32)

Сочувствую.
Welcome back :)


Ega23   (2004-12-29 10:32:00) [2]

Ты нас ругаешь за то, что ты ушел? :)

У нас прокси-сервер вчера грохнулся, твой ответ прочитать успел, а написать - фиг. Включился только вечером...  :о)


Sandman25   (2004-12-29 10:27:00) [3]

[20] Ega23 ©   (29.12.04 10:20)

Ты нас ругаешь за то, что ты ушел? :)

PS. Шучу, можно не отвечать.


Ega23   (2004-12-29 10:20:00) [4]

Да всё по теме, кто-ж спорит! :о)
Только уже между собой... :о)


Sandman25   (2004-12-29 10:16:00) [5]

[17] Ega23 ©   (28.12.04 14:44)

Вах, зачем обижаешь, дорогой?
Ни слова offtop-а, всё про варианты.


Суслик   (2004-12-28 14:53:00) [6]


> [17] Ega23 ©   (28.12.04 14:44)

Почему сразу нафлудили, не интересно, не читай.

Все по делу: грязный, но все же прием работы с variant.


Ega23   (2004-12-28 14:44:00) [7]

Во вы даёте! Нафлудили-то! На самом деле хватило [1], мой пост [2] был сродни рванья волос на голове, мол что-же я такой тупой, что очевидные вещи не вижу... :о)

Всем большое спасибо.


Sandman25   (2004-12-28 11:41:00) [8]

[15] Суслик ©   (28.12.04 11:40)

Понял. Замолкаю.


Суслик   (2004-12-28 11:40:00) [9]


>  [14] Sandman25 ©   (28.12.04 11:36)

об этом ты не говорил :))

И вообще см [6] ^))


Sandman25   (2004-12-28 11:36:00) [10]

[12] Суслик ©   (28.12.04 11:30)

А если до этого в VA[1] было, например, '1'?

[13] DiamondShark ©   (28.12.04 11:33)

:)


DiamondShark   (2004-12-28 11:33:00) [11]

Фу. Грязный хак!


Суслик   (2004-12-28 11:30:00) [12]


>  [11] Sandman25 ©   (28.12.04 11:27)

Хватит про это :)
Сейчас старики набегут и начнут про грязный хак :))

Все, что нужно я сказал :)))

ЗЫ. Примерно так, чтолько строка //clear не нужна - move'у по фигу, куда писать.


Sandman25   (2004-12-28 11:27:00) [13]

[10] Суслик ©   (28.12.04 11:24)

var
 VA: array [0..1] of Variant;
VA[1] := Unassigned; // clear
move(VA[0], VA[1], SizeOf(VA[0]));
ZeroMemory(@VA[0], SizeOf(VA[0]));

?


Суслик   (2004-12-28 11:24:00) [14]


>  [9] Sandman25 ©   (28.12.04 11:21)


> Понятно. Перед mov'ом новое место очищалось с помощью unassigned?

Нет, ты не так понял.

Есть v типа строка. Естественно это ссылка.
Если ты сделаешь move(v...), то будет нарушен подстчет ссылок.

Если потом написать v := unassigned, то компилятор полезер очишать строку. Для того, чтобы этоо не было надо для v писать fillchar.


Sandman25   (2004-12-28 11:21:00) [15]

[8] Суслик ©   (28.12.04 11:18)

Понятно. Перед mov'ом новое место очищалось с помощью unassigned?


Суслик   (2004-12-28 11:18:00) [16]


>  [7] Sandman25 ©   (28.12.04 11:14)

Иногда даже fillchar просто необходим.

Делал когда-то свой recordset. Идейно он был сделан на линейном массиве variant: сначала первая строка, потом вторая и т.д. Соответсвенно требовалось много операций - вставка строки/столбца, удаление строки/столбца, стандартные sql операции и т.д. Частно приходилось двигать move'ом куски на новое место. Что делать со старым местом? Очевидно, что присать v[i] := unassigned нельзя, т.к. при этом для будет очистка памяти и все такое. Приходится fillchar'ом.


Sandman25   (2004-12-28 11:14:00) [17]

[6] Суслик ©   (28.12.04 11:09)

Но на всякий случай лучше сразу написать, чтобы потом вопросов не было :)


Суслик   (2004-12-28 11:09:00) [18]


>  [5] Sandman25 ©   (28.12.04 11:08)

fillchar вроде как быстрей.

Я говорю про случаи, когда нужно понимать, что делаешь. :))


Sandman25   (2004-12-28 11:08:00) [19]

[4] Суслик ©   (28.12.04 11:07)

Лучше через ZeroMemory. Правда, не уверен, что это хорошая идея, если в вариантах хранились интерфейсы.


Суслик   (2004-12-28 11:07:00) [20]

если у тебя их очень много (массив, например) и нужно быстро, то можно через

fillchar(..., ..., 0);

т.е. нулями заполнить.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо