Share via


_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)