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.
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