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