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

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

Адрес функции


Vint44 ©   (2002-08-09 16:28:00) 

Подскажите пожайлуста, можно ли получить адрес функции, если она находится внутри объекта.


PVOzerski   (2002-08-09 18:44:00) [1]

Пожалуй, если объявить фиктивный класс, а в нём Ваш CustomSort как "class function", может, проблема и решится. А просто методом класса TDiapTarifs её сделать нельзя? (извините, сейчас мне немножко некогда вникать в детали).


Vint44   (2002-08-09 17:27:00) [2]

т.е. если эта функция так объявлена, то она будет работать только вне объекта и вариантов здесь нет?


Andrey Shakula   (2002-08-09 17:16:00) [3]

Ну ясно же написано что
type TStringListSortCompare = function(List: TStringList; Index1, Index2: Integer): Integer;
а не
type TStringListSortCompare = function(List: TStringList; Index1, Index2: Integer): Integer of object;
Следствие:
Рабтать не будет


Vint44   (2002-08-09 17:09:00) [4]

Функция сортировки CompareDiap:
type

TDiapTarifs=class(TStringList)
public
curDiapTarif: integer;
procedure Safe(S: TStream);
constructor Load(S: TStream);
procedure Delete(Index: Integer); override;
destructor Destroy; override;
function CompareDiap(List: TStringList;Ind1,Ind2: Integer): integer;
end;

TTarif=class(TObject)
slDT: TDiapTarifs;
constructor Create;
procedure Safe(S: TStream);
constructor Load(S: TStream);
destructor Destroy; override;
end;

var tmpTarif: TTarif;

Вызов CustomSort:
tmpTarif.slDT.CustomSort(@TDiapTarifs.CompareDiap);

Если я вытаскиваю CompareDiap из TDiapTarifs, то все работает.


disco_worm   (2002-08-09 17:05:00) [5]

Смотрите хелп по method pointers.


Skier   (2002-08-09 17:00:00) [6]

>Vint44
Покажи как вызываешь CustomSort и как объявляешь свою
функцию сортировки...



Vint44   (2002-08-09 16:56:00) [7]

Я создаю свою сортировку в TStringList через метод CustomSort
Ей требуется передававать адрес функции Compare, которая имеет параметры:

type TStringListSortCompare = function(List: TStringList; Index1, Index2: Integer): Integer;
procedure CustomSort(Compare: TStringListSortCompare); virtual;

из Help"а

Хочу запихнуть функцию Compare в свой объект, чтобы пологичней было.

Но через @TYourClass.Method кажется ее параметры не инициализируются


Skier   (2002-08-09 16:49:00) [8]

>Vint44
А что делаешь ?


Vint44   (2002-08-09 16:46:00) [9]

Спасибо сейчас компилируется, но в RunTime выдает ошибку
А если функция вне объекта, то все работает. Может подскажите в чем проблема?


Skier   (2002-08-09 16:33:00) [10]

>Vint44


var
APtr : Pointer;
//................
APtr := @TYourClass.Method;
//................


Наверх

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