Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.22;
Скачать: 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 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.017 c
14-71364
quark
2002-07-24 01:06
2002.08.22
Помогите с сайтом adept7.narod.ru


4-71417
_hovl_
2002-06-18 15:44
2002.08.22
Работа с файлами


4-71437
аак
2002-06-19 14:08
2002.08.22
Как скопировать папку со всем ее содержимым?


14-71375
Извращенец
2002-07-28 20:24
2002.08.22
PrintScreen


1-71206
[BAD]Angel
2002-08-09 13:07
2002.08.22
Мастера, помогите!!!