![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Адрес функции
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;
//................