Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.06.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.44 MB
Время: 0.006 c
14-7207
MBo
2002-04-27 09:57
2002.06.03
Начинается Net? Из borland.public.attachments


14-7171
Pat
2002-04-23 12:53
2002.06.03
Виснут игрушки :-(((


1-7092
ded_di
2002-05-16 13:34
2002.06.03
Окошко excel в delphi программе


1-7079
Zevsus
2002-05-21 11:49
2002.06.03
Как определить, какие *.bpl взять с собой?


3-6926
maxim2
2002-05-14 11:58
2002.06.03
Можно ли сделать колонку DBGrid невидимой?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский