Форум: "Основная";
Текущий архив: 2002.08.22;
Скачать: [xml.tar.bz2];
Вниз
Адрес функции Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c