You obtain the address for the original window procedure for the window defined by handle _vfp.HWnd
This._WindowProc = apiGetWindowLong(_vfp.HWnd, GWL_WNDPROC)
The handle is a number. For example, the moment you call the GetWindowLong the value is N.
Could you verify that:
1) The same handle N is used when you call the CallWindowProc -- nhWnd parameter must be equal to N.
2) _vfp.HWnd is still equal to N and does not change through the session.
* * *
Btw, is the main VFP window is visible when you run your application? Also I would check the validity of windows involved in the CallWindowProc call using this function
DECLARE INTEGER IsWindow IN user32 INTEGER hWindow
It returns non-zero value for valid window handles.