Foros del Web » Programación para mayores de 30 ;) » C/C++ »

(C) Error de variables

Estas en el tema de (C) Error de variables en el foro de C/C++ en Foros del Web. Buenas a todos, el título no es muy descriptivo pero aquí va la explicación: Tengo un programa básico en C el cual cuenta con el ...
  #1 (permalink)  
Antiguo 26/01/2012, 20:01
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
(C) Error de variables

Buenas a todos, el título no es muy descriptivo pero aquí va la explicación:

Tengo un programa básico en C el cual cuenta con el siguiente código (en una de sus funciones):

Código C:
Ver original
  1. long Message;
  2. long hWnd = 4391188;
  3.    
  4. Message = GetWindowLong(hWnd, GWL_EXSTYLE); // <--- Aquí el error

Nada raro, utilizo la función GetWindowLong del header windows.h.

El error o 'warning' es el siguiente, el cual ocurre al intentar compilar:

Código:
passing arg 1 of 'GetWindowsLongA' makes pointer from integer without a cast
El argumento 1 es hWnd el cual es un entero largo con un valor.

He visto por ahí el uso del & para la dirección de memoria por lo que utilicé &hWnd en lugar de hWnd simplemente, el código quedó de esta manera y a continuación otro error en la misma línea:

Código C:
Ver original
  1. long Message;
  2. long hWnd = 4391188;
  3.    
  4. Message = GetWindowLong(&hWnd, GWL_EXSTYLE);

Error o 'Warning':

Código:
passing arg 1 of 'GetWindowsLongA' from incompatible pointer type
No lo he podido solucionar, por eso acudo al foro, estaría muy agradecido si pudieran darme una mano

Gracias!
  #2 (permalink)  
Antiguo 27/01/2012, 01:31
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años
Puntos: 69
Respuesta: (C) Error de variables

y si le pasas un int y no un long? o si le pasas un puntero de long?

long*phWnd = &hWnd;

Message = GetWindowLong(*hWnd, GWL_EXSTYLE);
__________________
De nada, hay te encargo +1...
  #3 (permalink)  
Antiguo 27/01/2012, 01:54
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 11 meses
Puntos: 73
Respuesta: (C) Error de variables

Comprueba qué parámetros debes pasar a GetWindowLong. El primer error/warning (no has indicado exactamente si te da error o warning) que te da te está diciendo que estás intentando pasar un entero cuando espera un puntero. Abre el archivo windows.hwin.h, depende de tu compilador), que probablemente estará en el subdirectorio include de tu compilador. Encontrarás algo parecido a esto (los puntos suspensivos indican que hay más líneas):

Código C:
Ver original
  1. ...
  2. typedef void *HANDLE;
  3. ...
  4. typedef HANDLE HWND;
  5. ...
  6. LONG STDCALL GetWindowLongA(HWND,int);
  7. ...
  8. #define GetWindowLong GetWindowLongA
  9. ...

Es decir, que el parámetro HWND que espera GetWindowLongA (que es la función que te indica el mensaje de warning, debido al #define) es en realidad un puntero a tipo void.

El segundo mensaje se debe a que estás pasando como parámetro un puntero a long (al haber definido hWnd como long, &hWnd es un puntero a long), cuando está esperando un puntero a void.

No sé de donde procede el valor que has asignado a hWnd en su declaración, tampoco sé mucho de programación para Windows, pero entiendo que hWnd debería haber sido declarada como tipo HWND y su valor el obtenido al crear la ventana correspondiente.

Saludos,
  #4 (permalink)  
Antiguo 27/01/2012, 09:57
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: (C) Error de variables

Gracias a ambos por su respuesta ;) Ya pude solucionarlo:

Código C:
Ver original
  1. long Message;
  2. HWND hc = 4391188;
  3.    
  4. Message = GetWindowLong(hc, GWL_EXSTYLE); // <--- Aquí el error

Solo necesitaba declararlo como HWND :)

Gracias!

Etiquetas: funcion, programa, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:44.