Funções de retorno de chamada e seus usos
1 Visão geral das funções de retorno de chamada
A função de retorno de chamada é um mecanismo no qual o chamador passa alguns parâmetros para o objeto ao inicializar um objeto (o objeto aqui se refere a objetos em OOP, funções globais, etc.) e ao mesmo tempo passa uma função que o chamador pode acessar . O endereço é passado para o objeto. Esta função é um acordo de notificação entre o chamador e o receptor. Quando o evento acordado ocorre, o receptor (geralmente incluindo um thread de trabalho) chamará a função de acordo com o endereço da função de retorno de chamada.
Dessa forma, o chamador está em um thread e o receptor está em outro thread. Mensagem: A mensagem também pode ser considerada uma forma de retorno de chamada, porque a mensagem também é passada pelo chamador para o chamador durante a inicialização. Um identificador e um número de mensagem, o chamador envia uma mensagem ao chamador quando o evento acordado ocorre.
Dessa forma, o chamador está no thread principal e o receptor está no thread principal ou no thread de trabalho. Modelo de evento Delphi:
Existem muitos componentes visuais na VCL do Delphi que usam modelos de eventos, como o evento OnCreate do TForm. O princípio é: especifique a função do evento em tempo de design e, quando o evento for acionado em tempo de execução, a função de evento especificada em tempo de design será chamada. . Mecanicamente, o modelo de eventos do Delphi é igual aos retornos de chamada. No entanto, existem algumas diferenças nas formas específicas. Uma função de retorno de chamada pura está na forma de uma função global, enquanto um evento Delphi está na forma de um método de objeto. Ou seja, o seguinte tipo de função de retorno de chamada pode ser definido: tipo. TCallBackFunc = PRocedure (pData: Pointer) do objeto;
2 Instruções para usar funções de retorno de chamada
A função de retorno de chamada é usada principalmente em duas situações. A primeira é que algumas APIs do Windows exigem a função de retorno de chamada como endereço de parâmetro, e a outra é que uma função definida pelo usuário em uma ocasião específica requer a função de retorno de chamada como parâmetro de endereço. , para funções definidas pelo usuário, geralmente é usado ao chamar funções em bibliotecas de vínculo dinâmico. Existem várias etapas principais para usar uma função de retorno de chamada: 1. Definir um tipo de função de retorno de chamada não é diferente da definição de um processo de função geral, mas sua definição deve atender aos requisitos de função da função de retorno de chamada conforme necessário. in A definição de uma função ou procedimento deve ser seguida por uma declaração de que se trata de uma chamada padrão do Windows, por exemplo: typeTHDFunction= function(I:integer;s:string):integer para a declaração de um procedimento: type; THDProcedure=procedimento(s:string); stdcall;2. Em seguida, defina uma função ou processo correspondente com base neste protótipo. Não há requisitos para o nome desta função ou processo. O tipo dos parâmetros da função e o tipo do valor de retorno devem ser completamente consistentes com o retorno de chamada definido. tipo de função. Para procedimentos For, ele só precisa ser do mesmo tipo de parâmetro. Exemplo: Defina uma função correspondente e um processo correspondente com base no protótipo da função e processo acima. Definição do protótipo da função: Function HdFunExample(k:integer,sExam:string):integer; definição do processo: procedure HdProExample(sExam:string);stdcall 3. Implemente esta função ou procedimento de retorno de chamada no programa; inteiro,sExame:string):integer;stdcall;BeginEnd;procedure HdProExample(sExam:string);stdcall;beginend; 4. Processo de chamada; a função de retorno de chamada é geralmente usada como o endereço de entrada de uma determinada função no sistema de acordo com o protótipo da função de chamada: Suponha que haja a seguinte chamada; função: função DyHdFunExample(HdFun:THDFunction;I: inteiro):boolean Nota: Na função de chamada, a função de retorno de chamada pode ser chamada diretamente processando o ponteiro de função (ou seja, o parâmetro na função de chamada é o parâmetro do tipo de função de retorno de chamada e é operado diretamente), para que a função de retorno de chamada execute certas operações. Ou seja, a função da função de retorno de chamada é implementada na função de chamada. Chame: varI:integer;beginI:=DyHdFunExample(@HdFunExample,i);//…….End;
3 exemplos
O programa de amostra está no diretório H:/exemplos de função de retorno de chamada/. O uso de funções de retorno de chamada reside principalmente nas funções API originais do Windows, mas as funções de chamada definidas pelo usuário geralmente estão localizadas em bibliotecas de vínculo dinâmico. Geralmente, não há necessidade de usar funções de retorno de chamada no mesmo projeto. (Pessoalmente acho)...