Функции обратного вызова и их использование
1 Обзор функций обратного вызова
Функция обратного вызова — это механизм, в котором вызывающий объект передает некоторые параметры при инициализации объекта (объект здесь относится к объектам в ООП, глобальным функциям и т. д.) и в то же время передает функцию, к которой вызывающий может получить доступ. . Адрес передается объекту. Эта функция представляет собой соглашение об уведомлении между вызывающей стороной и вызываемой стороной. Когда происходит согласованное событие, вызываемая сторона (обычно включая рабочий поток) вызывает функцию в соответствии с адресом функции обратного вызова.
Таким образом, вызывающий объект находится в одном потоке, а вызываемый — в другом потоке. Сообщение. Сообщение также можно рассматривать как некоторую форму обратного вызова, поскольку сообщение также передается вызывающей стороной вызываемой стороне во время инициализации. Дескриптор и номер сообщения вызываемая сторона отправляет сообщение вызывающей стороне при возникновении согласованного события.
Таким образом, вызывающий объект находится в основном потоке, а вызываемый — в основном потоке или рабочем потоке. Модель событий Delphi:
В VCL Delphi есть множество визуальных компонентов, использующих модели событий, например событие OnCreate TForm. Принцип таков: укажите функцию события во время разработки, и когда событие запускается во время выполнения, будет вызываться функция события, указанная во время разработки. . Механически модель событий Delphi аналогична обратным вызовам. Однако существуют некоторые различия в конкретных формах. Чистая функция обратного вызова имеет форму глобальной функции, а событие Delphi — в форме метода объекта. То есть можно определить следующий тип функции обратного вызова: тип. TCallBackFunc = PROcedure (pData: Pointer) объекта;
2 Инструкция по использованию функций обратного вызова
Функция обратного вызова в основном используется в двух ситуациях. Во-первых, некоторые API-интерфейсы Windows требуют функцию обратного вызова в качестве адреса параметра, а во-вторых, функция, определенная пользователем в конкретном случае, требует функцию обратного вызова в качестве адреса. для пользовательских функций обычно используется при вызове функций в динамически подключаемых библиотеках. Существует несколько основных шагов для использования функции обратного вызова: 1. Определение типа функции обратного вызова ничем не отличается от определения общего процесса функции, но его определение должно соответствовать требованиям функции обратного вызова по мере необходимости. Единственное отличие состоит в том, что его определение должно соответствовать требованиям функции обратного вызова. в За определением функции или процедуры должно следовать объявление о том, что это стандартный вызов Windows, например: typeTHDFunction= function(I:integer;s:string):integer; для объявления процедуры: type; THDProcedure = процедура (ы: строка); stdcall;2. Затем определите соответствующую функцию или процесс на основе этого прототипа. Нет никаких требований к имени этой функции или процесса. Тип параметров функции и тип возвращаемого значения должны полностью соответствовать определенному обратному вызову. тип функции. Для процедур это должен быть только тот же тип параметра. Пример: Определите соответствующую функцию и соответствующий процесс на основе прототипа вышеуказанной функции и процесса. Определение прототипа функции: Function HdFunExample(k:integer,sExam:string):integer; stdcall; Определение процесса: процедура HdProExample(sExam:string);stdcall; 3. Реализуйте эту функцию обратного вызова или процедуру HdFunExample(k : целое число, sExam: строка): целое число; HdProExample(sExam:string);stdcall;beginend; 4. Вызов процесса; функция обратного вызова обычно используется в качестве адреса входа определенной функции в системе в соответствии с прототипом вызывающей функции: Предположим, что существует следующий вызов; функция: функция DyHdFunExample(HdFun:THDFunction;I: целое число):boolean Примечание: В вызывающей функции функция обратного вызова может быть вызвана напрямую путем обработки указателя функции (то есть параметр в вызывающей функции является параметром типа функции обратного вызова, и с ним можно напрямую работать), так что функция обратного вызова выполняет определенные операции. То есть функция обратного вызова реализована в вызывающей функции. Вызов: varI:integer;beginI:=DyHdFunExample(@HdFunExample,i);//…….End;
3 примера
Пример программы находится в каталоге H:/callback function example/. Функции обратного вызова в основном используются в исходных функциях API Windows, но определяемые пользователем функции вызова обычно находятся в динамически подключаемых библиотеках. Как правило, нет необходимости использовать функции обратного вызова в одном проекте. (Лично считаю)...