Programación General > Visual C++

 Re: Duda con las variables STATIC y la función FindText

(1/2) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa