Funciones de devolución de llamada y sus usos.
1 Descripción general de las funciones de devolución de llamada
La función de devolución de llamada es un mecanismo en el que la persona que llama pasa algunos parámetros al objeto al inicializar un objeto (el objeto aquí se refiere a objetos en programación orientada a objetos, funciones globales, etc.) y al mismo tiempo pasa una función a la que la persona que llama puede acceder. La dirección se pasa al objeto. Esta función es un acuerdo de notificación entre la persona que llama y la persona que llama. Cuando ocurre el evento acordado, la persona que llama (generalmente incluido un hilo de trabajo) llamará a la función de acuerdo con la dirección de la función de devolución de llamada.
De esta manera, la persona que llama está en un hilo y el destinatario está en otro hilo. Mensaje: el mensaje también se puede considerar como una especie de devolución de llamada, porque la persona que llama también pasa el mensaje a la persona que llama durante la inicialización. Un identificador y un número de mensaje, la persona que llama envía un mensaje a la persona que llama cuando ocurre el evento acordado.
De esta manera, la persona que llama está en el hilo principal y el destinatario está en el hilo principal o hilo de trabajo. Modelo de eventos de Delphi:
Hay muchos componentes visuales en la VCL de Delphi que utilizan modelos de eventos, como el evento OnCreate de TForm. El principio es: especificar la función del evento en tiempo de diseño, y cuando el evento se activa en tiempo de ejecución, se llamará a la función de evento especificada en tiempo de diseño. . Mecánicamente, el modelo de eventos de Delphi es el mismo que el de las devoluciones de llamada. Sin embargo, existen algunas diferencias en las formas específicas. Una función de devolución de llamada pura tiene la forma de una función global, mientras que un evento Delphi tiene la forma de un método de objeto. Es decir, se puede definir el siguiente tipo de función de devolución de llamada: tipo. TCallBackFunc = Procedimiento (pData: Puntero) del objeto;
2 Instrucciones para usar funciones de devolución de llamada
La función de devolución de llamada se utiliza principalmente en dos situaciones. La primera es que algunas API de Windows requieren la función de devolución de llamada como dirección de parámetro, y la otra es que una función definida por el usuario en una ocasión específica requiere la función de devolución de llamada como dirección de parámetro. , para funciones definidas por el usuario, se usa generalmente al llamar a funciones en bibliotecas de vínculos dinámicos. Hay varios pasos principales para usar una función de devolución de llamada: 1. Definir un tipo de función de devolución de llamada no es diferente de la definición de un proceso de función general, pero su definición debe cumplir con los requisitos de la función de devolución de llamada según sea necesario. en La definición de una función o procedimiento debe ir seguida de una declaración de que es una llamada estándar de Windows, por ejemplo: typeTHDFunction= function(I:integer;s:string):integer; THDProcedure=procedimiento(s:cadena); stdcall;2. Luego defina una función o proceso correspondiente basado en este prototipo. No hay requisitos para el nombre de esta función o proceso. El tipo de parámetros de la función y el tipo del valor de retorno deben ser completamente consistentes con la devolución de llamada definida. tipo de función. Para procedimientos, solo necesita ser el mismo tipo de parámetro. Ejemplo: defina una función correspondiente y un proceso correspondiente basado en el prototipo de la función y el proceso anteriores. Definición del prototipo de función: Función HdFunExample(k:integer,sExam:string):integer; definición del proceso: procedimiento HdProExample(sExam:string);stdcall 3. Implemente esta función o procedimiento de devolución de llamada en el programa; entero,sExam:cadena):entero; stdcall;BeginEnd;procedimiento HdProExample(sExam:string);stdcall;beginend; 4. Proceso de llamada; la función de devolución de llamada se usa generalmente como la dirección de entrada de una determinada función en el sistema de acuerdo con el prototipo de la función de llamada: suponga que existe la siguiente llamada; función: función DyHdFunExample(HdFun:THDFunction;I: entero):booleano Nota: En la función de llamada, la función de devolución de llamada se puede llamar directamente procesando el puntero de función (es decir, el parámetro en la función de llamada es un parámetro de tipo de función de devolución de llamada y se opera directamente), de modo que la función de devolución de llamada realiza ciertas operaciones. Es decir, la función de devolución de llamada se implementa en la función de llamada. Llamada: varI:integer;beginI:=DyHdFunExample(@HdFunExample,i);//…….End;
3 ejemplos
El programa de muestra se encuentra en el directorio H:/ejemplos de función de devolución de llamada/. El uso de funciones de devolución de llamada se encuentra principalmente en las funciones API originales de Windows, pero las funciones de llamada definidas por el usuario generalmente se encuentran en bibliotecas de enlaces dinámicos. Generalmente, no es necesario utilizar funciones de devolución de llamada en el mismo proyecto. (Pienso personalmente)...