Возвращает дескриптор MHANDLE нового блока памяти размером hsize.
MHANDLE _AllocHand(unsigned int hsize) unsigned int hsize; /* Размер нового блока памяти в байтах. */ |
Примечания
_AllocHand( ) возвращает 0, если для выполнения запроса памяти недостаточно. Память, выделяемая программой _AllocHand( ), не инициализируется и ее необходимо освобождать после использования.
Для получения дополнительной информации о том, как создавать библиотеку API и интегрировать её в Visual FoxPro, смотрите Доступ к API Visual FoxPro.
Пример
В следующем примере осуществляется размножение символа в памяти, предоставленной _AllocHand( ). API-функция REPLTOMH( ) возвращает в Visual FoxPro дескриптор блока памяти. Из Visual FoxPro этот дескриптор передается (как целое число, "I") API-функциям, в которых предусмотрен аргумент в виде дескриптора блока памяти.
Код Visual FoxPro
Copy Code | |
---|---|
SET LIBRARY TO ALLOCHAN mh = REPLTOMH("x", 120) ? MHTOFOX(mh) ? LEN(MHTOFOX(mh)) ? MHTOFOX(mh) = FREEMH(mh) |
Код C
Copy Code | |
---|---|
#include <pro_ext.h> // Replicate char argument to memory allocated with _AllocHand(). // Return the memory handle to Visual FoxPro. void FAR replToMH(ParamBlk FAR *parm) { char FAR *rep; char c = *(char *) _HandToPtr(parm->p[0].val.ev_handle); MHANDLE mh; if ((mh = _AllocHand((int) parm->p[1].val.ev_long + 1)) == 0) { _Error(182); // "Insufficient memory" } _HLock(mh); rep = _HandToPtr(mh); _MemFill(rep, c, (int) parm->p[1].val.ev_long); rep[parm->p[1].val.ev_long] = '\0'; // null terminate _HUnLock(mh); _RetInt(mh, 10); } // Returns characters in memory handle. // Argument in call from Visual FoxPro // must be a valid Visual FoxPro memory handle. void FAR MHToFoxString(ParamBlk FAR *parm) { char FAR *string; MHANDLE mh = parm->p[0].val.ev_long; _HLock(mh); string = _HandToPtr(mh); _RetChar(string); _HUnLock(mh); } // Frees memory handle. Argument in call from // Visual FoxPro must be a valid // Visual FoxPro memory handle. void FAR freeMH(ParamBlk FAR *parm) { _FreeHand((MHANDLE) parm->p[0].val.ev_long); } FoxInfo myFoxInfo[] = { {"REPLTOMH", (FPFI) replToMH, 2, "C,I"}, {"MHTOFOX", (FPFI) MHToFoxString, 1, "I"}, {"FREEMH", (FPFI) freeMH, 1, "I"}, }; FoxTable _FoxTable = { (FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo }; |
Смотрите также
Справочное руководство
Процедура библиотеки API _FreeHand( )Процедура библиотеки API _GetHandSize( )
Процедура библиотеки API _HandToPtr( )
Процедура библиотеки API _HLock( )
Процедура библиотеки API _HUnLock( )
Процедура библиотеки API _MemAvail( )
Процедура библиотеки API _SetHandSize( )
Концепции
Процедуры библиотеки API от A до ZПрочие ресурсы
Процедуры библиотеки API по категориямc Microsoft Corporation. All rights reserved. Microsoft is not reponsible for the contents of the translated help topics.