Programación General > Visual C++
Re: Duda con las variables STATIC y la función FindText
NEXTOR:
Hola.
Acabo de encontrarme con algo que no sabía. :question: A ver qué pensáis vosotros.
Dentro de una función de mi programa llamo a la función FindText para que aparezca el cuadro de diálogo no modal "Buscar". La función toma como argumento un puntero a una estructura FINDREPLACE. P.ej:
void miFuncion(){
...
FindText(&findreplace);
}
Dado que el cuadro es no modal, la función FindText devuelve el control al programa inmediatamente y mi función también finaliza, y el cuadro de diálogo necesita seguir accediendo a la estructura por lo que, a mi parecer, lo más lógico es que la variable estructura debería ser GLOBAL. Sin embargo, me he encontrado en un libro que definen esta variable como STATIC dentro de la función:
void miFuncion(){
static FINDREPLACE findreplace;
...
FindText(&findreplace);
}
Ya se que la vida de una variable estática dura durante todo el programa, pero ¿no se supone que su alcance está confinado a mi función? ¿No se producirán errores al manipular la estructura desde fuera?
Por favor, si alguien lo sabe...
Gracias.
eduskan2002:
Vamos a ver:excl:
El codigo que propones es correcto porque como tu bien dices la variable estática dura durante tuda la vida del programa, de modo que el cuadro de dialogo puede serguir accediendo a la estructura una vez finalizada la funcion, porque tu le has pasado el puntero a la estructura.
Es decir, el cuadro de dialogo accede a una zona de memoria (que permanece) no accede a traves de la variable cuyo ambito a terminado
De todas formas esto no te serviría si tu quieres acceder a la estructura a no ser que pongas la variable como global.
Espero a verte aclarado el tema.:bravo:
NEXTOR:
Muchas gracias por aclararme.
Y siento el retraso al contestar, hace que no entro en este foro... ¡Al final resulta que hay gente que sí que contesta :D ! :gracias:
shephiroth:
Buenas. Otra solucion que puedes utilizar es hacer que la funcion te devuelva el puntero a la estructura en cuestion, de esta forma nunca perderías el acceso.
El codigo podría ser algo como:
--- Código: Text --- FINDREPLACE* miFuncion(){ FINDREPLACE findreplace;...FindText(&findreplace);return &findreplace;}
Respecto ha si hay gente que responde, tiendo a pensar que cuando la gente lo sabe responde, si nadie responde es pq nadie sabe xDD.
NEXTOR:
:hola: Hola Sephi, gracias por contestar.
En el código que propones habría que añadir STATIC a la variable estructura, de lo contrario al salir de la función el espacio en memoria se reutilizaría para otras variables y el programa fallaría :blink: . De todas formas mi dudilla era si Windows podría seguir usando esa estructura para su cuadro de diálogo no modal de Buscar Texto, a mí no me haría falta la estructura.
Y volviendo al tema de si la gente responde, supongo que también hay mucha gente que sabe las cosas pero por pereza (a veces justificada, cuando se contesta siempre a la misma pregunta) no responde.
Saludines.
Navegación
[#] Página Siguiente
Ir a la versión completa