Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.01;
Скачать: CL | DM;

Вниз

Крыша едет...   Найти похожие ветки 

 
Bura ©   (2002-06-17 17:33) [0]

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

...
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


 
VDen ©   (2002-06-17 17:42) [1]

В Дельфях косяк, где еще-то... А может где-нибудь в пути для библиотек(Library Path) лежит такой же System.pas, но с глюком...


 
Alex is Fecit   (2002-06-17 19:11) [2]

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


 
Anatoly Podgoretsky ©   (2002-06-17 19:18) [3]

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


 
Bura ©   (2002-06-18 08:27) [4]

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


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

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

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


 
Anatoly Podgoretsky ©   (2002-06-18 09:03) [6]

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


 
Bura ©   (2002-06-18 09:11) [7]

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?


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

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


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

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


 
Bura ©   (2002-06-18 11:21) [10]

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


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

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


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

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

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

type
Boolean = Variant;

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

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



 
Bura ©   (2002-06-18 15:54) [13]

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


 
McSimm ©   (2002-06-18 16:23) [14]

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


 
Digitman ©   (2002-06-18 16:23) [15]

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

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


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

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


 
Bura ©   (2002-06-19 09:06) [17]

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


 
Anatoly Podgoretsky ©   (2002-06-19 09:57) [18]

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

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

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

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


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

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

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


 
Digitman ©   (2002-06-19 11:46) [20]

>Bura

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


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

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

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

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


 
McSimm ©   (2002-06-20 17:28) [22]

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



Страницы: 1 вся ветка

Текущий архив: 2002.07.01;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.014 c
8-1109
Сергей С
2002-02-25 12:15
2002.07.01
DirectShow


4-1262
Nickyboy
2002-04-30 17:52
2002.07.01
ПЛЗ, дайте примерчик нажатия кнопки, я уже больше не могу:)))


1-935
Vitalik
2002-06-19 15:51
2002.07.01
Debugger


1-1047
Frags
2002-06-18 13:38
2002.07.01
Где можно найти SpeedButton как в XP?


3-903
DKalinin
2002-06-07 14:36
2002.07.01
Помогите! Какую ошибку перехватывать при открытии ADOquery надо?