[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