SoloCodigo

Programación General => ASM (Ensamblador) => Mensaje iniciado por: Enko en Lunes 26 de Febrero de 2007, 20:46

Título: Globalrealloc
Publicado por: Enko en Lunes 26 de Febrero de 2007, 20:46
¿Como se usa esta funcion?
Segun entiendo sirve para redimensionar un bloque de memoria no FIXED que fue solicitado con  GlobalAlloc . (Entonces, primero solicito el bloque, le hago lock y..)
Código: Text
  1.  
  2. invoke GlobalReAlloc, [hMemory], GMEM_MOVEABLE+GMEM_ZEROINIT,MEMSIZE
  3. mov  [hMemory],eax;          eax es 0, error
  4. invoke [GlobalLock,hMemory]
  5. mov  [pMemory],eax
  6.  
  7.  
pero esto no resulta
Por alguna razon, cuando la uso, en eax me devuelve 0 o  sea, error.
¿Falta algo en la parte de GlobalReAlloc?



Para safar, uso esto>
Código: Text
  1.  
  2. GlobalUnlock, [pMemory]
  3. GlobalFree, [hMemory]
  4. GlobalAlloc, .........
  5. GlobalLock
  6.  
  7.  
Libero la memoria y la vuelvo a pedir pero creo que seria mejor usar GlobalReAlloc, pero esta falla.
Título: Re: Globalrealloc
Publicado por: Eternal Idol en Lunes 26 de Febrero de 2007, 22:28
No se para que usas Global* pero si copiaste el codigo correctamente estas pasando los parametros al revez:

HGLOBAL GlobalReAlloc(HGLOBAL hMem, SIZE_T dwBytes, UINT uFlags);

Primero el nuevo tamaño y despues los flags.


PD. Es mejor usar Heap*.
Título: Re: Globalrealloc
Publicado por: Enko en Lunes 26 de Febrero de 2007, 22:41
Esa es la otra duda que tenía, en los tutoriales de eczelion usan GlobalAlloc peró vi en un codigo que se usaba HeapAlloc. (No sabía cual era mejor)
Ahora que lo veo, creo que si los pasé al revés. Igualmente voy a cambiar a HeapAlloc.
Título: Re: Globalrealloc
Publicado por: Eternal Idol en Lunes 26 de Febrero de 2007, 22:44
Cita de: "Enko"
Esa es la otra duda que tenía, en los tutoriales de eczelion usan GlobalAlloc peró vi en un codigo que se usaba HeapAlloc. (No sabía cual era mejor)
Segun la biblia (MSDN):

Note  The global functions are slower than other memory management functions and do not provide as many features. Therefore, new applications should use the heap functions. However, the global functions are still used with DDE, the clipboard functions, and OLE data objects.

Y segun yo y mi depurador Globa* termina llamando a Heap* (que en realidad esta redireccionado a RtlHeap* en la NTDLL).
Título: Re: Globalrealloc
Publicado por: Enko en Lunes 26 de Febrero de 2007, 22:49
Citar
Y segun yo y mi depurador Globa* termina llamando a Heap* (que en realidad esta redireccionado a RtlHeap* en la NTDLL).
:o, grax.
Por ahora, cuando depuro, si veo una llamada a la API, le doy a F8 para que se saltee encima y no me muestre el codigo de las dlls que mi nivel de asm es mucho inferior a eso.

PD: dentro de pronto voy sacar un lector de bmp de 24 con rutinas propias. Por lo menos en eso estoy... :lightsabre:
Título: Re: Globalrealloc
Publicado por: Eternal Idol en Lunes 26 de Febrero de 2007, 22:53
Cita de: "Enko"
Por ahora, cuando depuro, si veo una llamada a la API, le doy a F8 para que se saltee encima y no me muestre el codigo de las dlls que mi nivel de asm es mucho inferior a eso.

Es solo cuestion de practica  :kicking:

Cita de: "Enko"
PD: dentro de pronto voy sacar un lector de bmp de 24 con rutinas propias. Por lo menos en eso estoy... :lightsabre:

Dale gas  :comp:  B)