_AllocMemo( ), API-Bibliotheksroutine
Reserviert den mit size (in Bytes) angegebenen Speicher in der Memodatei für ein Feld und fügt die neue Blocknummer in den zugehörigen Datensatz in der Datenbank ein.
long _AllocMemo(Locator FAR *fld,long size)
Locator FAR *fld; /* Pointer to locator
that defines the memo field. */
long size; /* Size of allocated space in bytes. */
Hinweise
Wenn _AllocMemo( ) erfolgreich ist, gibt es die Stelle in der Datei zurück, an der mit dem Schreiben begonnen wird. Andernfalls wird –1 zurückgegeben.
Vorsicht Das Schreiben von mehr als size Bytes führt zur Beschädigung der Memodatei.
Wenn Sie ein Memofeld mit direkten Methoden ersetzen möchten, müssen Sie sicherstellen, dass Ihre Routine vor dem Schreiben in der Memodatei _AllocMemo( ) aufruft, auch wenn der neue Wert kleiner oder gleich dem Ausgangswert ist. Auf diese Weise werden Probleme in Mehrbenutzerumgebungen vermieden. _AllocMemo( ) verwendet den zuvor reservierten Speicher wieder, sofern dadurch keine Probleme auftreten.
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 neuer Memofeldinhalt erstellt.
Visual FoxPro-Code
SET LIBRARY TO ALLOMEMO
CREATE TABLE wMemo (memoField M)
APPEND BLANK
= NewMemo(@MemoField, "Hello, World.")
APPEND BLANK
= NewMemo(@MemoField, "Isn't this fun?")
C-Code
#include <pro_ext.h>
FAR newMemo(ParamBlk FAR *parm)
{
Locator FAR *memoFldLoc;
FCHAN fchMemo;
int memoLen;
long loc;
if ((fchMemo = _MemoChan(-1)) == -1)
{
_UserError("_MemoChan() failed");
}
memoFldLoc = &parm->p[0].loc;
memoLen = parm->p[1].val.ev_length;
if ((loc = _AllocMemo(memoFldLoc, memoLen)) == -1)
{
_UserError("_AllocMemo() failed");
}
_FSeek(fchMemo, loc, FS_FROMBOF);
_HLock(parm->p[1].val.ev_handle);
_FWrite(fchMemo, _HandToPtr(parm->p[1].val.ev_handle), memoLen);
_HUnLock(parm->p[1].val.ev_handle);
}
FoxInfo myFoxInfo[] = {
{"NEWMEMO", (FPFI) newMemo, 2, "R,C"},
};
FoxTable _FoxTable = {
(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};
Siehe auch
_DBReplace( ), API-Bibliotheksroutine | _FindMemo( ), API-Bibliotheksroutine | _MemoChan( ), API-Bibliotheksroutine | _MemoSize( ), API-Bibliotheksroutine | Zugreifen auf die Visual FoxPro-API