Freigeben über


_MemMove( ), API-Bibliotheksroutine

Kopiert length Bytes von der Quelle src zum Ziel dest.

void _MemMove(void FAR *dest, void FAR *src, unsigned int length)
void FAR *dest;            /* Destination. */
void FAR *src;               /* Starting position. */
unsigned int length;         /* How many bytes to move. */

Hinweise

Sich überlappende Verschiebungen werden in der geeigneten Richtung durchgeführt, um Datenverluste zu vermeiden.

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 _MemMove( ) verwendet, um eine Teilzeichenfolgenfunktion zu implementieren. Von Visual FoxPro gibt MEMMOVE(s, n1, n2) die Teilzeichenfolge s zurück, die bei Position n1 beginnt und bei Position n2 endet.

Visual FoxPro-Code

SET LIBRARY TO MEMMOVE 
? MEMMOVE("Hello, world.", 8, 10)  && returns "wor"

C-Code

#include <pro_ext.h>

FAR Example(ParamBlk FAR *parm)
{
   int SubstrLen;
   MHANDLE bufferHandle;
   char FAR *FirstDest;

   SubstrLen = parm->p[2].val.ev_long - parm->p[1].val.ev_long + 1;
   if ((bufferHandle = _AllocHand(SubstrLen + 1)) == 0)
   {
      _Error(182); // "Insufficient memory"
   }
   _HLock(bufferHandle);
   _HLock(parm->p[0].val.ev_handle);
   FirstDest = (char FAR *) _HandToPtr(parm->p[0].val.ev_handle) +
      parm->p[1].val.ev_long - 1;

   _MemMove(_HandToPtr(bufferHandle), FirstDest, SubstrLen);

   ((char FAR *) _HandToPtr(bufferHandle))[SubstrLen] = '\0';
   _RetChar(_HandToPtr(bufferHandle));
   _HUnLock(bufferHandle);
   _HUnLock(parm->p[0].val.ev_handle);
}
FoxInfo myFoxInfo[] = {
   {"MEMMOVE", (FPFI) Example, 3, "C,I,I"},
};
FoxTable _FoxTable = {
   (FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};

Siehe auch

_MemCmp( ), API-Bibliotheksroutine | _MemFill( ), API-Bibliotheksroutine | Zugreifen auf die Visual FoxPro-API