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

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

Variant и Int64


Страницы:   1 2

GrBob ©   (2006-08-17 14:27:00) 

Есть такой код:

procedure Proc;
var
 A, B: Variant;
begin
 A := Int64(10);
 B := True;
 A := B;
end;


В Win 2003 Server все работает как надо, а вот в 2000 падает с ошибкой "Invalid Variant Type". Кто-нибудь знает почему?


Сергей М.   (2006-08-17 15:32:00) [21]


> вопрос остался - почему такое может происходить?


Вопрос не программиста, но ньюби.

Ставишь среду на проблемную машину, торассируешь пошагово проблемный код - получаешь ответ на вопрос.


GrBob   (2006-08-17 15:28:00) [22]

Спасибо, проблему решил другим способом, теперь такого присваивания просто нет :). Но вопрос остался - почему такое может происходить? Где может быть описана работа Варианта и инт64?


clickmaker   (2006-08-17 15:22:00) [23]


> сюда приходит Int64, может придти и строка

сдается мне, что в этом месте логика работы прихрамывает.. Не очень все прозрачно и однозначно, поэтому и грабли.

В конце концов
A := VarAsType(B, VarType(A));


GrBob   (2006-08-17 15:17:00) [24]


> а если A := VarAsType(B, varInt64)?

Так не падает. Но, к сожалению, такой подход мне не очень подходит, т.к. не всегда (в своей программе, а не в примере) сюда приходит Int64, может придти и строка, и в этом случае приводить к Int64 как то не с руки :) Во-вторых нужно после этого приводить обратно к Boolean и получим что-то страшное типа

if VarIsType(A, varInt64) then
 A := VarAsType(VarAsType(B, varInt64), varBoolean)
else
 A := B;


чего хотелось бы избежать.


clickmaker   (2006-08-17 15:10:00) [25]


> [8] GrBob   (17.08.06 15:00)

а если A := VarAsType(B, varInt64)?


GrBob   (2006-08-17 15:00:00) [26]


> наверное, ввели в вариант поддержку int64?

Я тоже склоняюсь к этому, но почему же тогда МСДН молчит, и Сергей М. обвиняет во лжи? Может дело не в виндах вобще?


GrBob   (2006-08-17 14:58:00) [27]


> К тому же при детальном разбирательстве выяснится что автор
> попросту врет)

???


Ketmar   (2006-08-17 14:58:00) [28]

наверное, ввели в вариант поддержку int64? а вообще -- всё это умозрительно, не видел я 2003.

мастера, поправьте, если что...
тут всё завязано на OleVariant'ы. в 2003, видимо, есть что-то для работы с int64, а вот в 2k ещё не было.


GrBob   (2006-08-17 14:56:00) [29]


> бессмысленный код какой-то...

Если я вам напишу несколько тысяч строк кода, вам станет понятнее? Я просто уже локализовал проблему, сведя ее вот к такому маленькому фрагменту. В МСДН я ничего особенного не нашел про приведение boolean к int64 в variant или чего-нибудь подобного.


Сергей М.   (2006-08-17 14:54:00) [30]

К тому же при детальном разбирательстве выяснится что автор попросту врет)


clickmaker   (2006-08-17 14:49:00) [31]

бессмысленный код какой-то...


GrBob   (2006-08-17 14:42:00) [32]


> потому что invalid variant type?

Ответ не исчерпывает вопрос полностью. Почему же в 2003 тогда не падает, а?


Ketmar   (2006-08-17 14:34:00) [33]

потому что invalid variant type? %-)


Страницы:   1 2

Наверх

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