[C con Clase] Comunicación serie.
Davidson, Steven
srd4121 en njit.edu
Mie Ene 23 23:35:29 CET 2013
Hola Raúl,
2013/1/23 raul castelar <raulcastelar en hotmail.com>
> Hola a todos.Que tal?
> Aquí expongo mi primer mensaje como nuevo usuario.
>
Ante todo, bienvenido a la lista de correo-e.
[CORTE]
> void LeeSerie() //el problema está aquí en leerserie
>
Veamos el código fuente.
{ COMSTAT cs;
> DWORD x,err;
> DWORD *y;
> y=&x;
>
> if( ! ClearCommError (canal, y,cs));
>
Aquí tienes dos errores.
El primero es que pasas 'cs' como el tercer parámetro, cuando el prototipo
indica que requiere un puntero a 'COMSTAT'. Debería ser:
ClearCommError( canal, &x, &cs )
La verdad es que no es necesario definir 'y', en este caso.
El segundo error es que colocas el punto y coma después de la condición,
terminando esta sentencia. Sin embargo, lógicamente, te interesa que la
condición controle las sentencias. Esto implica que necesitas un bloque de
sentencias, indicado por llaves:
if( !ClearCommError(canal, &x, &cs) )
{
...
}
err = GetLastError();
> if (err=ERROR_NOACCESS)
>
Esto es un error lógico, ya que estás asignando un valor a 'err' en lugar
de comparar ambos valores. Recuerda que, en C/C++, el operador = es de
asignación, y el == es de comparación de igualdad.
printf ("\n998 (0x3E6)Acceso no válido a ubicación de memoria\n");
>
> if(!ReadFile (canal, dato_r, cs.cbInQue, &x, NULL));
>
err = GetLastError();
> if (err=ERROR_NOACCESS)
>
Aquí repites los dos últimos errores anteriores:
1. Agregas el punto y coma, cuando deberías usar llaves, y
2. Usas el operador =, cuando realmente necesitas que sea ==
Espero que esto te ayude.
Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130123/eab09a14/attachment-0001.html>
Más información sobre la lista de distribución Cconclase