Freigeben über


_HandToPtr( ), API-Bibliotheksroutine

Übersetzt ein Speicherhandle in einen FAR-Zeiger (32-Bit), der auf den für dieses Handle reservierten Speicher verweist.

void FAR * _HandToPtr(MHANDLE hand)
MHANDLE hand;            /* Memory handle. */

Hinweise

Visual FoxPro hat immer dann die Möglichkeit zur Reorganisation des Speichers, wenn die Steuerung an Visual FoxPro oder an eine andere Routine außerhalb des aktuellen Moduls übergeben wird.

Anmerkung   _HandToPtr( ) löst keine Reorganisation des Speichers aus. Der durch _HandToPtr( ) zurückgegebene Zeiger kann immer dann ungültig werden, wenn die Steuerung an Visual FoxPro zurückgegeben wird, falls MHANDLE nicht gesperrt ist. Speichern Sie keine Zeiger in nicht gesperrten Speicherhandles über einen externen Funktionsaufruf hinaus, außer wenn dokumentiert wird, dass der Aufruf keine Speicherreorganisation auslöst.

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 der entsprechende Zeichenparameter auf dem Bildschirm angezeigt. _HandToPtr( ) übersetzt das Speicherhandle des API-Parameters in einen C-Zeiger.

Visual FoxPro-Code

SET LIBRARY TO HANDTOPT
= HANDTOPTR("Hello, world.")  && displays "Hello, world" on screen

C-Code

#include <pro_ext.h>

void NullTerminate(Value FAR *cVal)
{
   if (!_SetHandSize(cVal->ev_handle, cVal->ev_length + 1)) 
   {
      _Error(182); // "Insufficient memory"
   }
   ((char FAR *) _HandToPtr(cVal->ev_handle))[cVal->ev_length] = '\0';
}

FAR Example(ParamBlk FAR *parm)
{
   NullTerminate(&parm->p[0].val);
   _HLock(parm->p[0].val.ev_handle);
   _PutStr(_HandToPtr(parm->p[0].val.ev_handle));
   _HUnLock(parm->p[0].val.ev_handle);
}

FoxInfo myFoxInfo[] = {
   {"HANDTOPTR", (FPFI) Example, 1, "C"},
};
FoxTable _FoxTable = {
   (FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};

Siehe auch

_AllocHand( ), API-Bibliotheksroutine | _FreeHand( ), API-Bibliotheksroutine | _GetHandSize( ), API-Bibliotheksroutine | _HLock( ), API-Bibliotheksroutine | _HUnLock( ), API-Bibliotheksroutine | _MemAvail( ), API-Bibliotheksroutine | _SetHandSize( ), API-Bibliotheksroutine | Zugreifen auf die Visual FoxPro-API