Главная страница
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.009 c
14-7197
YuriyOL
2002-04-23 13:14
2002.06.03
DELAY


6-7139
Nic
2002-03-16 19:43
2002.06.03
Как подменить MAC адрес ?


3-6927
kalinka
2002-05-07 17:00
2002.06.03
Работа с Blob


14-7182
IronHawk
2002-04-23 13:52
2002.06.03
Конструктивное предложение по архиву форума !


14-7207
MBo
2002-04-27 09:57
2002.06.03
Начинается Net? Из borland.public.attachments