Slt,

Je suis en train d'ecrire une classe simple pour ecrire et lire sur le port serie,
mais voila, j'ai un ptit soucis tout bete

Les données passent bien sur le port serie, je les vois sur un terminal connecté sur le COM1, et cependant la variable nWritten reste à 0 apres la ligne en rouge

D'ou cela peut il venir selon vous ? du fait que je suis en asynchrone ?

Je me suis pourtant bien inspiré de la FAQ

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
67
68
69
70
class CLiaisonSerie
{
private:
    HANDLE        m_ComPort;
    DCB            m_config;
    OVERLAPPED    m_Ov;
public:
    CLiaisonSerie(void);
    ~CLiaisonSerie(void);
    BOOL Connecter(void);
    BOOL Deconnecter(void);
    BOOL Transmettre(CString buffer);

};


CLiaisonSerie::CLiaisonSerie(void)
{
    m_Ov.hEvent=NULL;
}

CLiaisonSerie::~CLiaisonSerie(void)
{
}


BOOL CLiaisonSerie::Connecter(void)
{
    BOOL err;
    // *****     OUVERTURE DU PORT     *****
    m_ComPort = CreateFile(    "COM1",                         // Choix du port « COMx » 
                            GENERIC_READ | GENERIC_WRITE,    // accès pour lire et écrire sur le port 
                            0,                                // accès exclusif au port de COM 
                            NULL,                            // sécurité par défaut 
                            OPEN_EXISTING,                    //Doit être à cette valeur car se n’est pas un fichier 
                            FILE_FLAG_OVERLAPPED,            // mode asynchrone asynchrone
                            NULL                          
                          );
    err = m_ComPort == INVALID_HANDLE_VALUE;

    if (!err){
        
        memset(&m_Ov,0,sizeof(m_Ov));

        // *****     CONFIGURATION DU PORT     *****
        GetCommState(m_ComPort,&m_config);
        m_config.BaudRate=115200;
        m_config.Parity=0;
        m_config.StopBits=0;
        m_config.ByteSize=8;
        err = SetCommState(m_ComPort,&m_config) == 0;
    }
    return(!err);
}

BOOL CLiaisonSerie::Deconnecter(void){
    if(m_Ov.hEvent) CloseHandle(m_Ov.hEvent);
    m_Ov.hEvent=NULL;
    return (CloseHandle(m_ComPort) ==  S_OK);
}

BOOL CLiaisonSerie::Transmettre(CString buffer){
    DWORD nWritten;
    BOOL Err;
    
    Err = WriteFile(m_ComPort, (LPCTSTR)buffer, buffer.GetLength(), &nWritten, &m_Ov);
    if (!Err) Err = nWritten != buffer.GetLength();
    return !Err;
}