Возвращает полезное число байтов в блоке памяти, заданном дескриптором 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( )