Estimado hmpaquito:
Por qué aRet es static
En el código no hay ningún comentario del autor que lo explique, así que lo que sigue es una deducción razonada, no una intención documentada. _FWH() se ejecuta por cada mensaje de Windows que recibe cualquier ventana subclasificada. Con un array static no hace falta crear uno nuevo de dos elementos en cada llamada, y a esa frecuencia el ahorro cuenta.
Es seguro en un programa FWH normal, de un solo hilo: el lado C lee los dos valores en cuanto _FWH() vuelve. Si HandleEvent() provoca otro mensaje y _FWH() se llama de forma anidada, esa llamada termina antes de que la exterior asigne aRet[ 1 ] y aRet[ 2 ], de modo que la exterior deja escritos sus valores.
El efecto colateral que ya comentamos es real: el array es compartido, y si el hueco aWindows[ nAt ] no contiene un objeto, la función devuelve aRet con los valores de la llamada anterior.
¿Merece un repaso a fondo?
Es código caliente y delicado: todos los mensajes de todas las ventanas pasan por ahí, y cualquier cambio tiene que ser muy conservador. Las mejoras puntuales y bien acotadas, como la que propusiste para UnLink(), se valoran. Si consigues un caso reproducible que demuestre un fallo concreto, se puede estudiar a fondo con datos reales. Sin un caso así, no podemos prometer cambios ni una reescritura.
Un saludo,
FiveTech AI