Protección contra reentrada en funciones de enlace
Mientras una función de enlace procesa un evento, se pueden desencadenar eventos adicionales, lo que puede hacer que la función de enlace se vuelva a escribir antes de que finalice el procesamiento del evento original. El problema con la reentrada en las funciones de enlace es que los eventos se completan fuera de secuencia a menos que la función de enlace controle esta situación.
Por ejemplo, considere un caso en el que una función de enlace en un programa de lector de pantalla está procesando el evento EVENT_OBJECT_VALUECHANGE para un control de edición. Si, al procesar el primer evento de cambio de valor, la función de enlace se vuelve a escribir para procesar un evento de cambio de valor posterior, el segundo evento se completa antes del primer evento. Esta situación da como resultado que el lector de pantalla transmita información inexacta al usuario.
Dado que se interrumpe el procesamiento de eventos, es posible que se reciban eventos adicionales cada vez que la función de enlace llama a una función que hace que se compruebe la cola de mensajes del subproceso propietario. Esto sucede cuando se llama a cualquiera de los siguientes elementos dentro de la función de enlace:
- La función Windows SendMessage, GetMessage, PeekMessage, DialogBox o MessageBox
- Las funciones de accesibilidad activa de Microsoft AccessibleObjectFromEvent, AccessibleObjectFromWindow, AccessibleObjectFromPoint
- Una interfaz IAccessible u otra propiedad o método del Modelo de objetos componentes (COM) que cruza los límites del proceso
Dado que las funciones de enlace llaman a las propiedades y métodos AccessibleObjectFromEvent e IAccessible , no es posible evitar la reentrada. La única solución es que los desarrolladores cliente agreguen código a la función de enlace que detecta la reentrada y realizan las acciones adecuadas si se vuelve a escribir la función de enlace.