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