Возвращает полезное число байтов в блоке памяти, заданном дескриптором hand.
unsigned long _GetHandSize(MHANDLE hand) MHANDLE hand; /* Дескриптор блока памяти. */ |
Примечания
Полезное число байтов всегда больше или равно числу байтов, в последний раз запрошенных для данного блока MHANDLE _AllocHand( ) или успешным вызовом _SetHandSize( ).
Замечание |
|---|
|
_GetHandSize() не вызывает реорганизацию памяти. |
Для получения дополнительной информации о том, как создавать библиотеку API и интегрировать её в Visual FoxPro, смотрите Доступ к API Visual FoxPro.
Пример
В следующем примере выделяются блоки памяти различных размеров - от 1 до 215 и показывается значение, возвращаемое _GetHandSize( ) в каждом случае. Заметьте, что возвращаемые _GetHandSize( ) значения лишь изредка в точности совпадают с размером, запрошенным _AllocHand( ); обычно эти значения чуть больше.
Код Visual FoxPro
Copy Code | |
|---|---|
SET LIBRARY TO GETHANDS | |
Код C
Copy Code | |
|---|---|
#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
}; | |
Смотрите также
Справочное руководство
Процедура библиотеки API _AllocHand( )Процедура библиотеки API _FreeHand( )
Процедура библиотеки API _HandToPtr( )
Процедура библиотеки API _HLock( )
Процедура библиотеки API _HUnLock( )
Процедура библиотеки API _MemAvail( )
Процедура библиотеки API _SetHandSize( )
Замечание