I did everything you suggested, but doesn't work...now this is the current situation:
Code:
class CMyDlg : public CDialog
{
....
private:
    void privExecCommand( CHAR cmd );
    static UINT __cdecl privListeningThread( LPVOID pParams );
....
}

BOOL CMyDlg::OnInitDialog()
{
....
    AfxBeginThread( (AFX_THREADPROC) &CMyDlg::privListeningThread, (LPVOID)(this) );
....
}


UINT CMyDlg::privListeningThread(LPVOID pParams)
{
....
    CMyDlg *pCaller = (CMyDlg*) pParams;
    do{
         .......
         cmd = foo_ReadPort();
         pCaller->privExecCommand( cmd );
         .......
    }while( TRUE );
    return 0;
}
It still happens that the method called can't find the right members of the object called, insted it finds zeroed fileds.
I'm using VC++ 6.0