Christof Wollenhaupt soluciona el problema de que VFP ejecute código originado en un hilo diferente.
Llamar a _Execute() desde un hilo diferente
Artículo original: Calling _Execute() from a different thread
http://www.foxpert.com/KnowlBits_200609_6.htm
Autor: Christof Wollenhaupt (http://www.foxpert.com/knowlbits.htm)
Traducido por: Ana María Bisbé York (amby@telefonica.net)
Para: PortalFox (http://www.portalfox.com)
Usted puede llamar a la función API _EXECUTE únicamente desde dentro del mismo hilo que emplea Visual FoxPro para cargar la librería. Llamar la función desde un hilo diferente causa problemas a Visual FoxPro. Si necesita ejecutar código originado en un hilo diferente, puede utilizar en su lugar, SendMessage. He aquí el código para la FLL. Ante todo, necesita una variable que almacene el controlador de ventana:
HWND hWndMain = NULL;
Luego, necesita una función que llame una aplicación VFP al controlador de registro
void FLL_Register( ParamBlk *Param )
{
hWndMain = (HWND) (Param->p[0].val.ev_long);
}
Finalmente siempre que desee utilizar _Execute(), utilice en su lugar, código como este
LRESULT Result;
Result = SendMessage( hWndMain, WM_USER, 0, 0 );
He aquí el código que carga la FLL y finaliza el mensaje
Set Library To Sample.FLL Additive
BindEvent( _VFP.Hwnd, 0x400, This, "WndProc" )
FLL_REGISTER( _VFP.Hwnd )
La rutina WdnProc tiene la siguiente apariencia
Procedure WndProc( tnHwnd, tnMsg, tnWParam, tnLParam )
Do case
Case m.tnMsg == 0x400
* Haga algo
Return 2
EndCase
EndProc
El valor devuelto (en este ejemplo es 2) se devuelve a la FLL en el valor Result. Similar a _Execute, la FLL está suspendida hasta que el programa VFP procese el mensaje.
|