Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eternal Idol

#881
Si, siempre que realloc no retorne null ya libero la memoria pasada como primer parametro.
#883
No, el PID no es un puntero, es un valor entero, entonces no tiene sentido pasarle un doble puntero para que escriba la direccion en el, igual aunque asi lo fuera lo estarias haciendo mal ya que deberias pasar &caca y no caca que es simplemente NULL.

Ahi arriba te deje exactamente como hacerlo.
#884
Estas haciendo lo mismo de nuevo ... le estas pasando NULL, la funcion necesita un puntero a DWORD.

Código (c++) [Seleccionar]
DWORD pid = NULL;
GetWindowThreadProcessId(ventana, &pid);
#885
Estas llamando mal a la funcion, el valor de retorno es el ID del HILO no del proceso:
The return value is the identifier of the thread that created the window.

El segundo parametro es un puntero a DWORD donde pone el ID del PROCESO, no le pases NULL si lo queres obtener.

lpdwProcessId [out, optional]
   Type: LPDWORD
   A pointer to a variable that receives the process identifier.


#886
GetWindowThreadProcessId. Despues solo tenes que enumerar los procesos en ejecucion en busqueda del PID.
#887
Y si, es una perdida de tiempo para el programa convertir cadenas. En la gama NT desde su primera version en 1993.
#888
En la linea 3 estas reservando punteros y no deberias reservar 200 veces mas de los estrictamente necesarios. Y ya que estamos CommandLineToArgvW puede fallar.

If wcstombs encounters the wide-character null character (L'\0') either before or when count occurs, it converts it to an 8-bit 0 and stops. Thus, the multibyte character string at mbstr is null-terminated only if wcstombs encounters a wide-character null character during conversion.

Eso quiere decir que si por una de esas casualidades a alguien se le ocurre pasar un parametro de 200 caracteres o mas (un path por ejemplo) tu cadena no tendra cero terminador. Mejor poner todos los elementos del array a 0 con el inicializador new () - nada nos garantiza los valores en la memoria reservada de otra manera - y pasar como count a wcstombs un caracter menos de los reservado (sino puede escribir en ese ultimo).

Código (c++) [Seleccionar]
...
if (LPWSTR *_argv = CommandLineToArgvW(GetCommandLineW(), &argc))
{
   char ** argv = new char*[argc];
...
       argv[i] = new char[200]();
wcstombs(argv[i], _argv[i], 199);
...


Lo mejor que se me ocurre es no hacerlo, Windows trabaja internamente con Unicode y practicamente cada vez que llamas a una API A (ANSI) tiene que hacer la conversion a Unicode y despues llamar a la API W.
#889
Programación C/C++ / Re: Que es esto?¿
9 Agosto 2015, 18:43 PM
En ese ultimo ejemplo no hay booleanos involucrados, se le asigna a las variables b y x el valor 7.

En el otro caso sabemos que es un booleano por una razon: estamos usando el operador de igualdad (==) y su tipo de retorno es bool.

Código (c++) [Seleccionar]
bool es_igual(int a, int b)
{
  return a == b;
}
#890
Tenes un error al enlazar, te falta la libreria de importacion para esa funcion. Podes arreglarlo en la configuracion del proyecto o en el codigo:

#pragma comment(lib, "winmm")