[C con Clase] Puerto Serial en WinAPI

Steven Richard Davidson stevenrichard.davidson en gmail.com
Mie Nov 14 07:03:54 CET 2007


Hola Paul,

On 11/13/07, Paul Andree Masias Chacon <paulmasias en yahoo.es> wrote:
> Ups, si ps olvide poner la linea de codigo en la q falla, en todo caso gracias por la pronta respuesta, en principio la linea de codigo es:
>
>    hHilo = CreateThread(NULL, 0, Hilo, &param, 0, &id);
>
> para la cual me manda el error:
>
> ...\codigo\pto\serie.cpp invalid conversion from `DWORD (*)(DWORD*)' to `DWORD (*)(void*)'
>

El problema está en que el tercer parámetro de la función
'CreateThread()' requiere un puntero a una función del siguiente tipo:

DWORD WINAPI ThreadProc( LPVOID );

mientras que en tu programa, envías un puntero a una función de este otro tipo:

DWORD WINAPI ThreadProc( DWORD * );

El compilador no puede encontrar una conversión entre el prototipo de
la función que das y el que 'CreateThread()' espera. Por ello, te
lanza un mensaje de error.

> y una consulta programante, diculpa la ignorancia pero es q no se q es un casting en programación, y bueno como lo hago.
>

Bueno. No soy Programante, pero te contestaré de todas maneras.

Un "cásting" es un cambio de tipo. Lo que Programante te aconseja, y
yo también, es realizar un cásting explícito para forzar un cambio de
tipos. Esto sería,

hHilo = CreateThread( NULL, 0, (DWORD (*)(LPVOID *))Hilo, &param, 0, &id );

El API de MS-Windows incluye una definición para tal tipo y por tanto
puedes usar esta definición para que no sea tan engorroso escribir el
código anterior. Esto sería,

hHilo = CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)Hilo, &param, 0, &id );


Sugiero consultar el capítulo 9 de nuestro curso de C++ acerca de
conversiones de tipos. Puedes dirigirte a:
http://c.conclase.net/curso/index.php?cap=009  También puedes echar un
vistazo al capítulo 42: http://c.conclase.net/curso/index.php?cap=042

> por otra parte respecto a la otra pregunta q hago respecto a como incluir la comunicacion serial en mi programa, y es q es esto lo q mas me interesa saber, de todas maneras muchas gracias por el tiempo prestado.
>

Salvador ya te contestó sobre esto. Básicamente, menciona que
consultaras el siguiente artículo:
http://articulos.conclase.net/serie/


Espero que esto te ayude.

Steven




Más información sobre la lista de distribución Cconclase