Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Juanma_faust en 19 Junio 2010, 21:46 pm



Título: No se muestra el texto Borland c++
Publicado por: Juanma_faust en 19 Junio 2010, 21:46 pm
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
  1. //* Boton*//
  2.  
  3. HWND Ventana = FindWindow(0,"Form1");
  4. void *Boton = FindWindowEx(Ventana,0,"Button",0);
  5. char *text;
  6. GetWindowText(Boton,text,sizeof(text));
  7. MessageBox(0,text,0,0);
  8.  

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

saludos


Título: Re: No se muestra el texto Borland c++
Publicado por: nicolas_cof en 19 Junio 2010, 21:49 pm
Debe ser porque a la variable text no le asignas espacio de memoria :P

Ver malloc o alloc

Salu10.


Título: Re: No se muestra el texto Borland c++
Publicado por: Juanma_faust en 19 Junio 2010, 22:18 pm
a...vaya pues en otros IDEs no hacia falta usar malloc :S ya se solucionó el problema,hice lo siguiente:
Código
  1. char *Text = (char*)malloc(1000);
  2.  
eso me funciono pero no sabia que se tenia que hacer asin puesto que con Dev-Cpp no hacia falta :S


muchas gracias!


Título: Re: No se muestra el texto Borland c++
Publicado por: nicolas_cof en 19 Junio 2010, 22:23 pm
Es raro que en Dev-Cpp no lo hayas tenido que hacer :¬¬

Igual para que te quede mas prolijo...

Código:
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.


Título: Re: No se muestra el texto Borland c++
Publicado por: Juanma_faust en 19 Junio 2010, 22:40 pm
ok gracias si lo del free ya lo sabia,ya lo hice muchas gracias


Título: Re: No se muestra el texto Borland c++
Publicado por: nicolas_cof en 19 Junio 2010, 22:41 pm
Juanma_faust, de nada!

Salu10.


Título: Re: No se muestra el texto Borland c++
Publicado por: Littlehorse en 20 Junio 2010, 01:08 am
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