No se muestra el texto Borland c++

Iniciado por Juanma_faust, 19 Junio 2010, 21:46 PM

0 Miembros y 1 Visitante están viendo este tema.

Juanma_faust

Hola que tal? veran necesito cojer el texto de un boton mediante las API de windows con Borland C++,yo lo e echo asin:
Código (cpp) [Seleccionar]

//* Boton*//

HWND Ventana = FindWindow(0,"Form1");
void *Boton = FindWindowEx(Ventana,0,"Button",0);
char *text;
GetWindowText(Boton,text,sizeof(text));
MessageBox(0,text,0,0);


pero me muestra texto muy raro no me muestra el texto me muestra caracteres muy raros,que es lo que pasa?

saludos

nicolas_cof

#1
Debe ser porque a la variable text no le asignas espacio de memoria :P

Ver malloc o alloc

Salu10.

Juanma_faust

a...vaya pues en otros IDEs no hacia falta usar malloc :S ya se solucionó el problema,hice lo siguiente:
Código (cpp) [Seleccionar]

char *Text = (char*)malloc(1000);

eso me funciono pero no sabia que se tenia que hacer asin puesto que con Dev-Cpp no hacia falta :S


muchas gracias!

nicolas_cof

#3
Es raro que en Dev-Cpp no lo hayas tenido que hacer :¬¬

Igual para que te quede mas prolijo...

char *text = malloc( 1000 * sizeof( char ) );

No es necesario hacer el casting, ya que malloc devuelve algo de tipo void*

No te olvides de luego llamar a la funcion free() para liberar esa memoria pedida.

Salu10.

Juanma_faust

ok gracias si lo del free ya lo sabia,ya lo hice muchas gracias


Littlehorse

#6
Si estas utilizando WINAPI siempre es recomendable utilizar los tipos de datos que están declarados en ella, como por ejemplo HWND, HANDLE, etc. De esta forma el código puede comprenderse mejor, por mas que void* técnicamente este ""bien"".

Por otro lado ten en cuenta que al reservar memoria dinámica, sizeof no te devuelve el tamaño reservado sino el tamaño del tipo de dato (Es decir, un puntero, 4 bytes) por lo tanto cualquier texto que supere los 4 bytes sera truncado cuando GetWindowText lo copie al buffer (text).

Y en la medida de lo posible utiliza otro entorno de trabajo que tanto Devcpp como Borland están obsoletos.

Saludos

An expert is a man who has made all the mistakes which can be made, in a very narrow field.