_GetHandSize( ) (Rutina de biblioteca API)
Devuelve el número utilizable de bytes asociados con un controlador (hand) de bloque de memoria especificado.
unsigned long _GetHandSize(MHANDLE hand)
MHANDLE hand; /* Handle of memory block. */
Observaciones
El número utilizable de bytes siempre es mayor o igual que el número de bytes solicitados más recientemente para este controlador MHANDLE por _AllocHand( ) o por una llamada _SetHandSize( ) con éxito.
Nota _GetHandSize( ) no origina ninguna reorganización de la memoria.
Para obtener más información acerca de cómo crear una biblioteca API e integrarla con Visual FoxPro, vea Acceso a la API de Visual FoxPro.
Ejemplo
El siguiente ejemplo asigna bloques de memoria de diversos tamaños entre 1 y 215, y muestra el valor devuelto por _GetHandSize( ) para estas asignaciones. Observe que el valor devuelto por _GetHandSize( ) sólo algunas veces es exactamente igual que el tamaño solicitado por _AllocHand( ); en general es un poco mayor.
Código Visual FoxPro
SET LIBRARY TO GETHANDS
Código C
#include <pro_ext.h>
void putLong(long n)
{
Value val;
val.ev_type = 'I';
val.ev_long = n;
val.ev_width = 5;
_PutValue(&val);
}
void FAR Example(ParamBlk FAR *parm)
{
MHANDLE mh;
unsigned int allocSize;
for (allocSize = 1;; allocSize *= 2)
{
if ((mh = _AllocHand(allocSize)) == 0)
{
_Error(182); // "Insufficient memory"
}
_PutStr("\n_AllocHand("); putLong(allocSize); _PutStr(")");
_PutStr("\n_GetHandSize() ="); putLong(_GetHandSize(mh));
_FreeHand(mh);
if (allocSize == 32768)
{
break;
}
}
}
FoxInfo myFoxInfo[] = {
{"ONLOAD", (FPFI) Example, CALLONLOAD, ""},
};
FoxTable _FoxTable = {
(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};
Vea también
_AllocHand( ) (Rutina de biblioteca API) | _FreeHand( ) (Rutina de biblioteca API) | _HandToPtr( ) (Rutina de biblioteca API) | _HLock( ) | _HUnLock( ) (Rutina de biblioteca API) | _MemAvail( ) (Rutina de biblioteca API) | _SetHandSize( ) (Rutina de biblioteca API)