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

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

Крыша едет... [D5]


Страницы:   1 2

Bura ©   (2002-06-17 17:33:00) 

Господа, кто-нибудь встречался с таким:

...
var
Flag, ss: Boolean;
begin
...
Flag:=True;
ss:=False;
if (Flag and ss) then {Здесь выдает ошибку Invalid variant type conversion}
begin
...


Так вот, не пойму, почему??? Раньше вроде все работало. Может, в оптимизаторе чего? (Данные False и True я присвоил просто для проверки. На самом деле, там могут быть и другие).
Ставит на строчки в system.pas:

varAny: AnyChangeType(Dest, Source, DestType);
else if not ChangeSourceAny(Dest, Source, DestType) then
if VariantChangeTypeEx(Dest, Source, $400, 0, DestType) <> 0 then
VarCastError;
end;


(8668 строка).
Delphi 5, SP1


McSimm   (2002-06-20 17:28:00) [1]

* rus * (20.06.02 17:22)
Хорошо, что ты не на месте Делфи :)


* rus *   (2002-06-20 17:22:00) [2]

По-моему, решение ищется не там. Из всех Вас в данном случае прав именно blackman (18.06.02 09:38)

>Поставь в скобки if ((flag) and (ss))
>должно сработать

Если скобок не поставить, то выражение Delphi"ой интерпретируется как if (flag and ss = true), т.е. выполняется арифметическое(!) И над логическими операндами. Я б на месте Delphi тоже сругнулся.


Digitman   (2002-06-19 11:46:00) [3]

>Bura

Ставь BP на строку с IF, лови BP, в дебагере запроси значения TVarData(Flag).VType и TVarData(ss).VType ... Если дебагер при вычислении обоих выражений не покажет ошибки, 100% - и Flag и ss есть варианты !


McSimm   (2002-06-19 10:18:00) [4]

То что ShowMessage("2") не отрабатывает может быть из-за ложности условия в if. А ошибка при этом происходит либо в else, либо дальше по коду.

Поставь точку прерывания на строчку с if и пошагово пройди по программе до появления ошибки.


Anatoly Podgoretsky   (2002-06-19 09:57:00) [5]

Одназначно у тебя переопределен тип и вот возможные враги

DMShrd, DocHndl, SysTools, C5Types, cutils, ConfHndl, LTOpers, LAgents;

но это при условии, что ты привел все необходимые куски кода и одназначно определил, что ошибка происходит именно в этой строке.

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


Bura   (2002-06-19 09:06:00) [6]

>Skier Такая же беда.
>DigitMan
ДО if я поставил ShowMessage("1") после begin я поставил ShowMessage("2"). Сообщение "1" показывает, вываливается с ошибкой и сообщение "2" не показывает. Или это ни о чем не говорит?
А кусок CPU ща попробую сделать.


Skier   (2002-06-18 16:28:00) [7]

> Bura
А если заменить Flag на, скажем AFlag.
Ну, просто в качестве эксперемента.


Digitman   (2002-06-18 16:23:00) [8]

>>
if (Flag and ss) then {Здесь выдает ошибку Invalid variant type conversion}

А с чего ты взял, что именно ЗДЕСЬ ? Приведи конкретные аргументы в пользу сего факта


McSimm   (2002-06-18 16:23:00) [9]

Хорошо бы посмотреть кусок из CPU window, соответствующий приведенному участку программы.


Bura   (2002-06-18 15:54:00) [10]

Все uses, использованные в этом модуле, используются и в других модулях, тем не менее, там все прокатывает. А насчет объявлений в процедуре - это все. Все, что вместо "..." можно просто закомментить и будет тот же результат. Эти две переменных больше нигде не используются. Я их объявил просто так для проверки условия при возникновении ошибки.


troits   (2002-06-18 11:52:00) [11]

>Bura © (18.06.02 09:11)
>А тип чего он мог переопределить? Boolean?

А почему бы и нет? Если в каком - нибудь "заюзанном" модуле в interface написать что - то вроде

type
Boolean = Variant;

const
True = "True";
False = "False";

, то как раз такой exception и возникнет.


Skier   (2002-06-18 11:40:00) [12]

> Bura
Покажи объявления процедуры (или функции).
То есть покажи что у тебя вместо "..."


Bura   (2002-06-18 11:21:00) [13]

Кстати, если обе переменные True, то все нормально. При закрытии Delphi и запуске приложения без IDE, ошибки не возникает. Это частично решает проблему, но "неприятный осадок..." (с)...


Kaban   (2002-06-18 09:45:00) [14]

blackman
Не думаю, что это может решить проблему
Представленный в вопросе код абсолютно корректен


blackman   (2002-06-18 09:38:00) [15]

Поставь в скобки if ((flag) and (ss))
должно сработать


Bura   (2002-06-18 09:11:00) [16]

unit ChPrH;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
FldAns, StdCtrls, Mask, DBCtrls, ExtCtrls, Menus, DBUtils, DB, RXCtrls,
RXDBCtrl;


uses DMShrd, DocHndl, SysTools, C5Types, cutils, ConfHndl, LTOpers, LAgents;

А тип чего он мог переопределить? Boolean?


Anatoly Podgoretsky   (2002-06-18 09:03:00) [17]

Bura © (18.06.02 08:27)
приведи список uses, оба
Вероятно у тебя какой нибудь другой модуль переопределил тип


дядька Рус   (2002-06-18 08:52:00) [18]

Явление до боли знакомое :). У меня этот чертов Invalid variant type conversion вываливается практически постоянно. Что характерно - избавиться от него можно только отключив в IDE "Stop on Delphi exceptions" из вкладки "Language Exceptions" в окне "Debugger options" (меню Tools -> Debuuger Options".
Т.е., насколько я понимаю, эта ошибка непосредственно в дебаггере, котрый вшит в IDE.

ЗЫ Update Pack 2 к Delphi 6 ничего не исправил :(


Bura   (2002-06-18 08:27:00) [19]

Anatoly Podgoretsky>
а как он может стать Вариантом? Он же явно объявлен Булевским. И операции все булевские. Хочу сказать, что с этими двумя переменными ничего, кроме мною описанных присваиваний нет.
VDen>
У меня пути стоят на один system.pas. Еще раз повторюсь, что раньше было все нормально. (Может поможет, но раньше я использовал IBX для доступа к InterBase, теперь FIBPlus(купленный)). Дело все в том, что этот код в другом модуле прокатывает на "Ура".
Alex is Fecit>
А смысл? У меня же эти переменные вычисляются (это я просто для пробы присвоил им значения). Но все равно то же самое.


Anatoly Podgoretsky   (2002-06-17 19:18:00) [20]

Судя по строчке у тебя Boolean уже не Boolean, а Variant
Ищи врагов в своем отечестве


Страницы:   1 2

Наверх

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