Bonjour,

J'utilise la classe de farscape que j'ai int�gr� dans une DLL. Je peux donc l'instancier � partir d'une autre application.

Par contre, j'ai deux probl�mes au niveau du thread avec SendMessage(), voici le code:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
//-----------------------------------------
/*static*/ UINT CCommSerie::Thread(LPVOID pParam)
{
// 
    CCommSerie *pCom = (CCommSerie*)pParam;
    int nResult;
    DWORD WaitEvent = 0;
    DWORD dwError=0;
    DWORD dwMaskEvent=0;
    
	//POUR ESSAI, A EFFACER
	//pCom->m_pParent->SendMessage(WM_CCOMRCV,(WPARAM)pCom,dwMaskEvent);

    pCom->m_bThreadExist=true; // amorce l'existance du thread
    while(1)
    {
        nResult=pCom->WaitCommEvent(dwMaskEvent);
        if (!nResult)  
        { 
            switch(dwError=GetLastError()) 
            {             
            case 87:
            case ERROR_IO_PENDING:
                break;
                
            default:
                {
                    // erreur de communication on fait suivre ...
                    pCom->GetError();
                    pCom->OnError(dwError);                    
                    break;
                }
            }
        }
        else
        {
            if(pCom->IsRXEmpty()) continue;
        }
        // attente evenement pour sortie eventuelle du thread ou reception
        WaitEvent = WaitForMultipleObjects(2, pCom->m_hArrayEvent, FALSE, INFINITE);
        
        switch (WaitEvent)
        {
        case 0: //Fermeture Thread 
                   pCom->m_bThreadExist=false;
                   AfxEndThread(1);
                   return(0);
            
        case 1:dwMaskEvent=pCom->GetCommMask();
                    if(dwMaskEvent & EV_RXCHAR) // reception sur la voie.
                         pCom->m_pParent->SendMessage(WM_CCOMRCV,(WPARAM)pCom,dwMaskEvent);
            
            if ((dwMaskEvent & EV_CTS) ||  // evenements divers.
                (dwMaskEvent & EV_RXFLAG) ||
                (dwMaskEvent & EV_BREAK) ||
                (dwMaskEvent & EV_ERR)
                || (dwMaskEvent & EV_RING))
            {
                pCom->m_pParent->SendMessage(WM_CCOMEVENT,(WPARAM)pCom,dwMaskEvent);
            }
            break;
        }
    };
    return 0;
}
Voici comment j'ai proc�d�:
Afin de tester la gestion des �v�nements, d�s que je rentre dans le thread j'envoie l'�v�nement WM_CCOMRCV � mon thread principal(appli utilisant la dll). Celui-ci d�clenche juste une AfxMsgBox. Jusque l�, pas de soucis!
Par contre, une fois le message envoy�, je me retrouve avec un plantage (0xC0000005) sur la ligne suivante:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
nResult=pCom->WaitCommEvent(dwMaskEvent);
Je ne l'explique pas...

Pour continuer dans mes tests, je mets en commentaires l'envoie de l'�v�nement pr�c�dent, et dans le thread principal, instanciant CCom, j'envoie des donn�es sur la ligne s�rie. Ligne s�rie � laquelle j'ai connect� RX � TX au bout pour r�cup�rer les infos �mises.
J'arrive donc � la ligne suivante dans le thread:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
case 1:dwMaskEvent=pCom->GetCommMask();
                    if(dwMaskEvent & EV_RXCHAR) // reception sur la voie.
                         pCom->m_pParent->SendMessage(WM_CCOMRCV,(WPARAM)pCom,dwMaskEvent);
mais cette fois ci, je reste bloqu� sur cette fonction, �tant donn� qu'il me semble que le message n'est pas trait� puisque aucun appel � la fonction associ� au message n'est fait.
Je ne comprends pas � nouveau pourquoi...Une id�e?

Merci

Nicolas