Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.07.01;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.005 c
1-949
BKV
2002-06-19 18:42
2002.07.01
Доступ к полям компонента, заданным в Obj Inspect в конструкторе


14-1169
MaximatorVeter
2002-05-22 18:34
2002.07.01
Подкиньте работу!


1-958
Задумчивый
2002-06-19 14:03
2002.07.01
Размер изображения в файле bmp


1-973
Antoniz
2002-06-18 10:07
2002.07.01
Как к ячейкам TStringGrid привязать TCombobox


3-928
Proton
2002-05-25 23:59
2002.07.01
SQL запрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский