Objetos y sockets IrDA

moeses
21 de Noviembre del 2005
Hola a todos,
Tenía una pregunta relacionada con las librerías de infrarrojos (IrDA) de Windows. Por introducir el tema, en Win2K y XP se utiliza los Winsocks que tienen una dll especial para IrDA (AF_irda.h), a la que se le hacen llamadas para descubrir los dispositivos y crear los sockets.
Por cuestión de diseño (es decir, me lo han impuesto), tengo que usar el MFC de VC++ (con un sistema WinXP), y tengo algunas dudas. Simplemente necesitaría poder crear un objeto global donde guardar el descubrimiento IrDA.
Os explico un poco más en detalle. Para hacer un descubrimiento, primero se define el objeto

PDEVICELIST según las especificaciones de windows:
BYTE DevListBuff[sizeof(DEVICELIST) - sizeof(IRDA_DEVICE_INFO) + (sizeof(IRDA_DEVICE_INFO) * DEVICE_LIST_LEN)];
int DevListLen = sizeof(DevListBuff);
PDEVICELIST pDevList = (PDEVICELIST) &DevListBuff;

A continuación se abre el socket del tipo AF_IRDA (lo he llamado xSock), y se ejecuta la instrucción:

getsockopt(xSock, SOL_IRLMP, IRLMP_ENUMDEVICES, (CHAR *) pDevList, &DevListLen)

guardándose en pDevList toda la estructura.
¿alguien sabría cómo hacer un objeto global de esta estructura para que no dependa del método en el que hemos hecho el descubrimiento? Este objeto contiene el número de dispositivos, un array de caracteres con los dispositivos, y las direcciones IrDA (octetos) de cada uno, por lo que lo necesito para el resto de funcionalidades del programa.
A su vez, si abro un socket en el método que hago el descubrimiento (pulsando click en un Button), ¿cómo puede mantener ese socket durante toda la ejecución del programa, para que pueda hacerle más llamadas con otros métodos?
Muchas gracias por vuestra ayuda, y perdón por la longitud del mensaje ;)

kike
21 de Noviembre del 2005
Desconozco casi al completo el tema de los shockets, todavia ni lo he mirao, pero de la MFC si que se algunas cosillas.
Si usas el wizard de VC para crear una aplicacion MFC te generara una clase terminada en App, esta clase representa tu aplicacion y en ella puedes declarar objetos que duren toda la vida del programa.
Despues puedes usra la funcion global AfxGetApp(), que te proporcionara un puntero al objeto App, desde cualquier parte, para ver o utilizarlo.
Espero que te sea de ayuda...

moeses
21 de Noviembre del 2005
Muchas gracias kike.
En efecto mi problema tiene más que ver con el desconocimiento de la MFC que con otra cosa.
Ok, además he estado leyendo documentación de MFC y creando la estructura en la clase App y incluyéndola con "extern" en mi clase de diálogo ya consigo que funcione.
Muchas gracias por tu ayuda.
Saludos