Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gibt ein neues MHANDLE-Handle der Größe hsize zurück.
MHANDLE _AllocHand(unsigned int hsize)
unsigned int hsize; /* Size of new memory handle in bytes. */
Hinweise
_AllocHand( ) gibt 0 zurück, wenn nicht genügend Arbeitsspeicher vorhanden ist, um die Anforderung zu erfüllen. Mit _AllocHand( ) reservierter Speicher wird nicht initialisiert und muss nach der Verwendung freigegeben werden.
Weitere Informationen zum Erstellen einer API-Bibliothek und ihrer Integration in Visual FoxPro finden Sie unter Zugreifen auf die Visual FoxPro-API.
Beispiel
Im folgenden Beispiel wird ein Zeichen in einem Speicherbereich wiederholt, der von _AllocHand( ) zur Verfügung gestellt wurde. Die API-Funktion REPLTOMH( ) (siehe unten) gibt das Speicherhandle an Visual FoxPro zurück. Aus Visual FoxPro wird das Speicherhandle an API-Funktionen übergeben, die ein Speicherhandle-Argument erwarten (übergeben als ganze Zahl, I).
Visual FoxPro-Code
SET LIBRARY TO ALLOCHAN
mh = REPLTOMH("x", 120)
? MHTOFOX(mh)
? LEN(MHTOFOX(mh))
? MHTOFOX(mh)
= FREEMH(mh)
C-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
};
Siehe auch
_FreeHand( ), API-Bibliotheksroutine | _GetHandSize( ), API-Bibliotheksroutine | _HandToPtr( ), API-Bibliotheksroutine | _HLock( ), API-Bibliotheksroutine | _HUnlock( ), API-Bibliotheksroutine | _MemAvail( ), API-Bibliotheksroutine | _SetHandSize( ), API-Bibliotheksroutine