Выделяет 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
Copy 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
Copy 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
}; | |
Смотрите также
c Microsoft Corporation. All rights reserved. Microsoft is not reponsible for the contents of the translated help topics.
Важно