Выделяет size байтов в memo-файле для поля и вставляет новый номер блока в соответствующую запись базы данных.
long _AllocMemo(Locator FAR *fld, long size) Locator FAR *fld; /* Указатель на локатор, определяющий memo-поле. */ long size; /* Размер выделяемой области в байтах. */ |
Примечания
Когда _AllocMemo( ) выполняется успешно, она возвращает позицию в файле, с которой можно начинать писать; в противном случае возвращается - 1.
![]() |
---|
Запись более чем size байт приведет к порче memo-файла. |
Если вы собираетесь менять содержимое memo-поля непосредственным образом, убедитесь, что перед записью в memo-файл ваша программа вызывает _AllocMemo( ), даже если новое значение будет той же длины, что и оригинал, или еще короче. Это избавит вас от проблем в ситуации, когда работают несколько пользователей. _AllocMemo( ) может повторно использовать ранее выделенную область, если это ничем не чревато.
Для получения дополнительной информации о том, как создавать библиотеку API и интегрировать её в Visual FoxPro, смотрите Доступ к API Visual FoxPro.
Пример
В следующем примере создается новое содержимое memo-поля.
Код Visual FoxPro
![]() | |
---|---|
SET LIBRARY TO ALLOMEMO CREATE TABLE wMemo (memoField M) APPEND BLANK = NewMemo(@MemoField, "Hello, World.") APPEND BLANK = NewMemo(@MemoField, "Isn't this fun?") |
Код C
![]() | |
---|---|
#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 }; |
Смотрите также

c Microsoft Corporation. All rights reserved. Microsoft is not reponsible for the contents of the translated help topics.