The event handler is stored in a HandlerDesc data structure as a PFNHANDLER, along with a pointer to a block of memory allocated and owned by the application. This pointer will be passed into the application's event handler with each event to be processed. The HandlerDesc data structure also contains a PFNFREEHANDLER that will be called when the observer is released so that the application may free the private memory allocated and passed to the event handler.
IObserver_SetHandler() associates a given HandlerDesc data structure with a particular observer.
void IObserver_SetHandler(IObserver* pi, HandlerDesc* pDesc);
The handler installed by a controller to process events should itself remember to call HANDLERDESC_Call() so that controller that themselves derive from this controller may also hook into the controller's event handler.