Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.009 c
8-7129
ciloit
2002-01-12 16:37
2002.06.03
Файл BMP


14-7179
Pat
2002-04-24 20:50
2002.06.03
Ошибка при открытии проекта


3-6938
alex11111
2002-05-14 16:48
2002.06.03
Проблема с увязкой MySQLQuery с DBGrid


1-6956
ymin
2002-05-22 16:45
2002.06.03
Почему по команде form1.print ни один combobox не печатается?


1-7046
phantom2040
2002-05-21 11:04
2002.06.03
Загрузка в Memo текстового файла




   Наверх