Ciao a tutti,
non so se questo è il posto giusto dove postere questo messaggio, se no scusatemi.
Arrivo subito al punto, sto realizzando un programma con il Microsoft Visual C++ 2008 Express Edition che dialoga con una scheda mediante seriale.
Dato che non ne sapevo niente di come comunica il VC++ con seriale, ho cercato un pò in rete e alla fine trovato dei tutorial, ma ora mi si pone un problema.
Il codice realizzato è il seguente:

codice:
#include<iostream>
#include "stdafx.h"
#include "windows.h"
#include "conio.h"
using namespace std;

BOOL setComm(HANDLE hComm)
{
    DCB dcb;
    BOOL res;

    FillMemory(&dcb, sizeof(dcb), 0);
    res = GetCommState(hComm, &dcb); 
    if (!res)
        return FALSE;
	
    dcb.ByteSize = 8;
    dcb.StopBits = TWOSTOPBITS;
    dcb.BaudRate = CBR_57600;
    dcb.Parity = NOPARITY;
    dcb.fAbortOnError = 0; 
    
    res = SetCommState(hComm, &dcb);
   
    if (!res)
        return FALSE;

    DWORD err = GetLastError();
    if ( err)
      cout << "Errore " << err << endl; 

    return TRUE;
}

void state(HANDLE hComm)
{
    DCB dcb;
    BOOL res;

    FillMemory(&dcb, sizeof(dcb), 0);
    res = GetCommState(hComm, &dcb); 

    DWORD err = GetLastError();
    if ( err)
     cout << "Errore ricevuto " << err << endl;

    SetLastError(0);
}

BOOL write(HANDLE hComm, char * buf)
{
  DWORD nNumberOfBytesToWrite = strlen(buf);
  DWORD NumberOfBytesWritten;
  LPOVERLAPPED lpOverlapped = NULL;
  BOOL res = WriteFile(
             hComm, 
             buf, 
	nNumberOfBytesToWrite, 
	&NumberOfBytesWritten, 
	lpOverlapped 
	);
   if (res)
    cout << "Scrittura OK " << endl;
   else
    {
      DWORD err = GetLastError();
      cout << "Errore in Scrittura " << err;
    }

return res;
}


int main(int argc, char* argv[])
{
    char gszPort[] = "COM1";

    HANDLE hComm;
    hComm = CreateFile( gszPort,
        GENERIC_READ | GENERIC_WRITE,
        0,
        0,
        OPEN_EXISTING,
        0, 
        0);

    if (hComm == INVALID_HANDLE_VALUE)
    {
	cout << "Errore nell'apertura della porta " << endl;
    }
    else
    {
	char comando;
	char* com = &comando;
	cout << "inserisci un comando ";
	cin >> comando;
	cout << endl;
	cout << "comando inserito " << comando << endl;
	if (comando == 't' || comando == 'v')
	{	
  	cout << "il comando inserito può essere eseguito" << endl;

	// qui devo modificare
	char c;
	char CR[] = {13,10,0};
	DWORD nNumberOfBytesToRead = 1;
	DWORD NumberOfBytesRead=0;
	LPOVERLAPPED lpOverlapped = NULL; 
	BOOL bResult;

             bResult = setComm(hComm);

	// questo deve essere modificato
	write(hComm, com);
	//write(hComm, CR);
	//write(hComm, CR);

           for(;;)
	{
	nNumberOfBytesToRead = 1;
	bResult = ReadFile(
   	   hComm,
	   &c,
	   nNumberOfBytesToRead,
	   &NumberOfBytesRead,
	   lpOverlapped
	 );
	            
              if (NumberOfBytesRead>0)
	  cout << c;
	    //printf("%c", c);
           }
           }
        else
          {
	cout << "il comando inserito non appartiene ai comandi che possono essere eseguiti" << endl;
		}

	CloseHandle(hComm);
        }
       cout << endl;
       getch();
       return 0;
}
Con la seriale riesco a comunicare ma, come dice anche il tutorial, il programma va in "wait", quindi si blocca tutto.
Il tutorial suggeriva di "threadare" la lettura e scrittura su seriale.
Ho provato a lavorare su questo punto ma trovo delle difficoltà, mi potete dare qualche suggerimento o dove posso trovare materiale?
Grazie mille
Ciccio