![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов метода дедушки [D6, WinXP]
Th © (2002-12-03 16:12:00)Напомните, плз, как вызвать метод дедушки не вызывая метода папы. Задача простая - надо обойти вызов метода TOpenPictureDialog, потому что он template плохой ставит.
Fantasist (2002-12-04 23:18:00) [1]
> Куда запишется Self при оптимизации - неважно, и неважно
> также и формат вызова
См. меня:
> Fantasist © (04.12.02 06:39)
> ....
> Но на самом деле это совершенно неважно, кроме того случая,
> с которым я сейчас работаю.
Есть редкие случаи, когда это важно.
DarkGreen (2002-12-04 09:42:00) [2]2 Fantasist: Заметил что в конструкторах объектов зачаутую self сидит в ebx, у нас из-за этого куча проблем была :-)
Dimka Maslov (2002-12-04 09:19:00) [3]>Fantasist
Куда запишется Self при оптимизации - неважно, и неважно также и формат вызова. Важно, что Self передаётся неявно, как первый параметр вызываемого метода.
Fantasist (2002-12-04 06:39:00) [4]
> стек, хотя после этого сразу записывается в eax.
Ага, я тоже поторопился. При оптимизации, он его записывает его куда ему больше понравиться, а не обязательно в eax. Без оптимизации он его никуда не записывает, а все время считавает из ebp+8 при каждом обращении. D6. Но на самом деле это совершенно неважно, кроме того случая, с которым я сейчас работаю.
DarkGreen (2002-12-04 05:53:00) [5]
> Зависит от соглашения вызова. В stdcall - передается через
> стек, хотя после этого сразу записывается в eax.
Угу, согласен, проstdcallя как-то не подумал :-)
Fantasist (2002-12-03 20:34:00) [6]
> Передается в делфях через регистр eax
Зависит от соглашения вызова. В stdcall - передается через стек, хотя после этого сразу записывается в eax.
DarkGreen (2002-12-03 19:47:00) [7]У любого процедуры (функции) принадлежащей классу есть один параметр, называемый Self. Передается в делфях через регистр eax, так что и у TOpenDialog.Execute есть параметр Self, просто его реализация скрыта.
Th (2002-12-03 16:44:00) [8]Пасиба, все сработало, только у TOpenDialog.Execute нет параметра Self:TObject, у нее вообще нет параметров. Но это не принципиально.
Dimka Maslov (2002-12-03 16:36:00) [9]
type
TFunc = function (Self: TObject): Boolean;
function TSomeClass.Func: Boolean;
var
Func: TFunc;
begin
Func := @TGrandfatherClass.Func;
Result := Func(Self);
end;
Th (2002-12-03 16:13:00) [10]Забыл указать - метод TOpenPictureDialog.Execute