![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Variant
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);
т.е. нулями заполнить.