Вниз
Скачать: CL | DM;

Адрес функции   Найти похожие ветки 

 
Vint44 ©   (2002-08-09 16:28) [0]

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


 
Skier ©   (2002-08-09 16:33) [1]

>Vint44


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


 
Vint44 ©   (2002-08-09 16:46) [2]

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


 
Skier ©   (2002-08-09 16:49) [3]

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


 
Vint44 ©   (2002-08-09 16:56) [4]

Я создаю свою сортировку в 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 17:00) [5]

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




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

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


 
Vint44 ©   (2002-08-09 17:09) [7]

Функция сортировки 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, то все работает.


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

Ну ясно же написано что
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:27) [9]

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


 
PVOzerski ©   (2002-08-09 18:44) [10]

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



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.011 c
1-71076
Сережа
2002-08-12 11:13
2002.08.22
Удаление автозагрузки из реестра


1-71164
lak_b
2002-08-13 18:38
2002.08.22
поиск в ListBox


14-71369
Феликс
2002-07-27 16:12
2002.08.22
Прикольно


1-71108
anod
2002-08-12 13:40
2002.08.22
Почему-то не работает ?


6-71287
serd_hhc
2002-06-10 10:36
2002.08.22
Re: Четыре вопроса (И что никто не поможет ?=( )




   Наверх