Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/05/2008, 11:21
Avatar de flanagan44
flanagan44
 
Fecha de Ingreso: abril-2004
Mensajes: 182
Antigüedad: 20 años, 7 meses
Puntos: 2
COM1 + API'S en Borland C++

Pues tengo que hacer una practica donde haga un "driver" para poder comunicar 2 PC's por el puerto serie.

Resulta que el envio me funciona perfectamente, pero la recepcion de datos no me va ni hacia atras.

El trabajo tiene que ser echo en Borland C++ y utilizando los API's de windows.

El tema que teoricamente de falla seria este:

Código:
bool llegir_port(DWORD); // Declaració anònima

// Accions a realitzar pel thread
DWORD WINAPI ThreadFunc(LPVOID Param)
{
        // Anirem llegint indefinidament caràcter a caràcter pel port sèrie
        // i el mostrarem per pantalla
        while(1)
        {
            if(llegir_port(1))
            {
                Form1->rebre->Text=Form1->rebre->Text+(char)(sBuffer[0]+32);
            } 
        }

}


bool llegir_port(DWORD num_dades)
{
    if(conect==1)
    {
       DWORD iBytes;
       if (!ReadFile(hCom, &sBuffer, num_dades, &iBytes, NULL))
       { // lectura
          Application->MessageBoxA("No es pot llegir el port","Error",MB_OK|MB_ICONINFORMATION);
          return false;
       }

       if (iBytes != num_dades)
       { // comprovem dades rebudes
          return false;
       }
       return true;  // si tot esta correcte, retorna cert
    }
    else return false;
}

void __fastcall TForm1::Button3Click(TObject *Sender)
{
        if (obrir_port())
        {
                Form1->Button3->Enabled=false;
                Form1->Button2->Enabled=true;
                Form1->barra_estat->SimpleText="Connectat";
                Form1->rebre->Text=Form1->rebre->Text+sBuffer[0];

                
                // Quan creem la finestra també creem el Thread
                DWORD Id;
                Thread = CreateThread(0, 0, ThreadFunc,Form1->Handle, CREATE_SUSPENDED, &Id);
                if(!Thread) //Si no s'ha creat correctament
                {
                    Application->MessageBoxA("Error! No s'ha pogut crear el thread","Thread",MB_OK|MB_ICONWARNING);
                    Application->Terminate();
                }
                //Engeguem ja el thread de lectura continuada del port sèrie
                ResumeThread(Thread);
        }
}
Esto es lo que uso, si alguien tiene una diea me haria un favor.

gracias