Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.03;
Скачать: CL | DM;

Вниз

Процедурные типы   Найти похожие ветки 

 
SPeller ©   (2002-05-21 15:32) [0]

Привет! Помогите пожалуйста разобраться с процедурными типами. В справке эта тема плохо освещена.
Код такой:

type
TForm1 = class(TForm)
....
function Hookproc(hc,wParam:longint;lParam:pcwpretstruct):longint;
private
hhook:longint;
Hooker:function(hc,wParam:longint;lParam:pcwpretstruct):longint;
public
...
end;

implementation

procedure TForm1.SomeProc;
begin
hooker:=hookproc; // Тут ошибка, хотя как в хелпе
...
end;

function TForm1.Hookproc(hc,wParam:longint;lParam:pcwpretstruct):longint;
begin
...
end;


Так вот. Объясните мне пожалуйста, как присвоить переменной Hooker функцию Hookproc, чтобы адрес её можно было передать в АПИ функцию(Хук в моём случае). Делаю как в хелпе, не хотит, ошибка вылазит. И второй вопрос: правильно ли описываю функцию, которая будет callback"ом (Hookproc).
Чего-то я не въезжаю, объясните пожалуйста!!!


 
PVOzerski ©   (2002-05-21 15:46) [1]

Во-первых, Вы чуточку ошиблись. Описание процедурной переменной в том виде, как Вы ей описали, предполагает присвоение ей "автономной" функции уровня вложенности 0, а не метода класса. Коль скоро Вы планируете присваивать метод, извольте описывать
Hooker:function(hc,wParam:longint;lParam:pcwpretstruct):longint of object;
Дело в том, что обычная процедурная переменная по сути - указатель на точку входа, а вот процедурная переменная of object - связка двух указателей - на код и на данные.

Во-вторых, если бы Вы присваивали не метод, а обычную функцию,
разных версиях Delphi было бы по-разному. Ваш пример прекрасно пошел бы на D2, а вот в более новых версиях иногда необходимо добавлять адресный оператор @ (детальнее сообщить не могу: надо специально подбирать примеры и тестировать их, так что просто поверьте).



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

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

Наверх




Память: 0.47 MB
Время: 0.016 c
14-7159
mio
2002-04-22 17:02
2002.06.03
Длина шнурков


1-7023
MegaVolt
2002-05-16 13:18
2002.06.03
Как сделать дерево выбора каталога с CheckBox`ами?


1-6955
Alku
2002-05-22 11:17
2002.06.03
Как изменить системное время в WinNT-2000 ?


1-6987
Kopachev
2002-05-22 21:51
2002.06.03
В чем я не прав


3-6930
khan
2002-05-14 06:34
2002.06.03
Колесо мыши в DBGRID