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

Вниз

Поиск ошибок   Найти похожие ветки 

 
Chubais ©   (2003-01-23 18:31) [0]

Вот такой вот у меня вопросик: что за косяки такие могут быть, что ошибки происходят в методах VCL? получаю лог ошибок, смотрю по адресу - а там то в TControl.Perform, то TControl.SetVisible или TField.GetEditText...
8-о
как побороть такую беду?


 
Chubais ©   (2003-01-23 18:42) [1]

вот это я запостил блин... промахнулся))))))))))


 
smok_er   (2003-01-23 19:57) [2]

Любая ошибка чем то вызвана :) А ты так говоришь, будто пустой проект с одной формой компилишь и ошибки лезут :)

Исходный код дай какой-то "ошибки".


 
Chubais ©   (2003-01-24 09:08) [3]

smok_er (23.01.03 19:57)
блин...ну ты сказал... откуда мне знать, когда было вызвано TField.GetEditText? ладно бы я запускал в дебаггере, еще можно было что-то придумать, а то программа у юзера такое выдает.

впрочем, могу код привести
TField.GetEditText:
Result := "";
if Assigned(FOnGetText) then
...
push ebx
push esi
mov esi,edx
mov ebx,eax
mov eax,esi
call @LStrClr
cmp word ptr[ebx+$000000d2],$00 вот здесь ошибка
jz +$15
...
ошибка гласит: AV при обращении к адресу 000000d2
наскока я понимаю, в ebx к тому моменту должен лежать адрес этого самого Field, у которого сравнивается значение FOnGetText
почему там оказывается 0, загадка...

может я чо-то неправильно понимаю?


 
Chubais ©   (2003-01-24 09:23) [4]

2 Admin
я конешно все понимаю, но классификация моего вопроса как "потрепаться", рядом с "именинниками 24-го февраля", мне кажется не совсем верной...


 
Cobalt ©   (2003-01-24 09:43) [5]

Малова-то кода. Впечатление такое, что автор забыл, что
FOnGetText - это private properties.
Или это модифицированный код исходинков VCL?
P.S. код совершенно непонятный, к чему он относится, вырван из контекста, который, наверняка, скажет намного больше.


 
Chubais ©   (2003-01-24 09:48) [6]

Cobalt © (24.01.03 09:43)
>>Малова-то кода

открываешь Source\vcl\DB.pas, находишь там
function TField.GetEditText: string;
begin
Result := "";
if Assigned(FOnGetText) then
FOnGetText(Self, Result, False) else
GetText(Result, False);
end;
именно кусок кода, относящийся к ошибке, я и привел
код немодифицированный, самый родной из всех что может быть


 
Игорь Шевченко ©   (2003-01-24 09:55) [7]

Дык, Self нулю равен :-) И все дела...


 
Chubais ©   (2003-01-24 10:22) [8]

Игорь Шевченко © (24.01.03 09:55)
дык ошибка-то вроде на строке if Assigned(FOnGetText)
наскока я понял ей и соответствует cmp word ptr[ebx+$000000d2],$00
до FOnGetText(Self, Result, False) вроде как еще не дошло
даже если Self нулю равен, то как его его метод вызывается?


 
Mystic ©   (2003-01-24 10:25) [9]

В EBX действительно должен быть равно Self, как показывают следующие рассуждения:

1. TField.GetEditText - неявно принимает в регистре EAX этот самый Self.
2. Далее значение EAX сохраняется в EBX
3. По соглашениям Delphi, вызов процедуры/функции не может модифицировать значение регистра EBX, поэтому в EBX остается значение Self.

К сожалению, имхо, приведенного кода недостаточно для того, чтобы определить, почему при вызове GetEditText значение Self равно nil.


 
Игорь Шевченко ©   (2003-01-24 10:28) [10]

Chubais © (24.01.03 10:22)

> даже если Self нулю равен, то как его его метод вызывается?


А что-то запрещает ?
При вызове невиртуального метода генерируется обычный вызов процедуры, а Self передается в качестве параметра. Если внутри метода происходят ссылки на поля этого Self"а, то при равенстве его nil происходит, как у тебя, банальный Access Violation.

А уж почему у тебя поле nil - это я не знаю :-)



 
Mystic ©   (2003-01-24 10:33) [11]

> как его его метод вызывается?

Например, так:

var
F: TField;
begin
F := nil;
ShowMessage(F.Text);
end;


 
app ©   (2003-01-24 10:38) [12]

Chubais © (24.01.03 09:23)
Ты против, только скажи исправим


 
Chubais ©   (2003-01-24 10:40) [13]


> Mystic © (24.01.03 10:25)
> К сожалению, имхо, приведенного кода недостаточно для того,
> чтобы определить, почему при вызове GetEditText значение
> Self равно nil.

так я больше и не могу привести - не знаю, откуда был вызван этот метод

> Игорь Шевченко © (24.01.03 09:55)
> Дык, Self нулю равен :-) И все дела...

ок, это уяснил
а как быть с остальными ошибками? там тоже какие-то непонятки...
у меня такое ощущение, что я скомпилил прогу с исходниками VCL, а pas не соотвествует dcu...


 
Игорь Шевченко ©   (2003-01-24 10:42) [14]

Chubais © (24.01.03 10:40)

Взять в руки исходники, тщательно просмотреть глазами. Запустить программу под управлением MemProof.
Далее, как обычно...


 
Anatoly Podgoretsky ©   (2003-01-24 10:42) [15]

Chubais © (24.01.03 10:22)
Тебе намекают, что ты объект не создал, именно так и будет в этом случае


 
Ketmar ©   (2003-01-24 10:47) [16]

>Chubais © (24.01.03 10:40)
а что, стэк вызовов моль побила?

Satanas Nobiscum! 24-Jan-XXXVIII A.S.


 
Chubais ©   (2003-01-24 10:58) [17]


> Ketmar © (24.01.03 10:47)
> >Chubais © (24.01.03 10:40)
> а что, стэк вызовов моль побила?

см:

Chubais © (24.01.03 09:08)
smok_er (23.01.03 19:57)
блин...ну ты сказал... откуда мне знать, когда было вызвано TField.GetEditText? ладно бы я запускал в дебаггере, еще можно было что-то придумать, а то программа у юзера такое выдает.


Anatoly Podgoretsky © (24.01.03 10:42)
ок, понял



> Игорь Шевченко © (24.01.03 10:42)
> Chubais © (24.01.03 10:40)
>
> Взять в руки исходники, тщательно просмотреть глазами. Запустить
> программу под управлением MemProof.
> Далее, как обычно...

попробую...MemProof никогда не пользовал...


 
Ketmar ©   (2003-01-24 11:01) [18]

>Chubais © (24.01.03 10:58)
сорри, не заметил. забираю камень обратно %-))

Satanas Nobiscum! 24-Jan-XXXVIII A.S.


 
Chubais ©   (2003-01-24 11:09) [19]

Ketmar © (24.01.03 11:01)
))))
время собирать камни))))


 
Anatoly Podgoretsky ©   (2003-01-24 11:25) [20]

Chubais © (24.01.03 10:22)
Тебе намекают, что ты объект не создал, именно так и будет в этом случае



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

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

Наверх




Память: 0.51 MB
Время: 0.017 c
1-28808
Zirus
2003-02-02 07:11
2003.02.10
вопрос по scrollbox


14-28996
Zhenka
2003-01-26 14:36
2003.02.10
Ув. Господа. кто нибудь знает


3-28685
Fishka
2003-01-23 13:39
2003.02.10
MSWord, Table и закладки


1-28732
Paladin
2003-01-30 18:32
2003.02.10
Автоматическое создание класса.


14-29082
scorpi
2003-01-25 11:27
2003.02.10
Драйвера под windows