_MemoSize( ) (Rutina de biblioteca API)
Devuelve la longitud del campo memo especificado en el archivo memo del registro actual.
long _MemoSize(Locator FAR *fld)
Locator FAR *fld; /* Memo field address. */
Observaciones
Cuando el campo memo del registro actual está vacío, o cuando fld no es un campo memo, _MemoSize( ) devuelve un entero negativo cuyo valor absoluto es un número de error de Visual FoxPro.
Para obtener más información acerca de cómo crear una biblioteca API e integrarla con Visual FoxPro, vea Acceso a la API de Visual FoxPro.
Ejemplo
El siguiente ejemplo recupera el contenido de un campo memo para el registro actual. _MemoSize( ) se emplea para determinar la cantidad de memoria que debe asignarse para un búfer y la cantidad de bytes que deben leerse del campo memo.
Código Visual FoxPro
SET LIBRARY TO MEMOSIZE
CREATE TABLE WMemo (MemoField M)
APPEND BLANK
REPLACE MemoField WITH "Hello, World."
? GETMEMO(@MemoField)
Código C
#include <pro_ext.h>
FAR FindMemoEx(ParamBlk FAR *parm)
{
Locator FAR *memoFldLoc;
FCHAN fchMemo;
char FAR *memoContents;
int memoLen;
long loc;
if ((fchMemo = _MemoChan(-1)) == -1)
{
_UserError("_MemoChan() failed");
}
memoFldLoc = &parm->p[0].loc;
if ((loc = _FindMemo(memoFldLoc)) < 0)
{
_UserError("_FindMemo() failed");
}
if ((memoLen = _MemoSize(memoFldLoc)) < 0)
{
_UserError("_MemoSize() failed");
}
if ((memoContents = _Alloca(memoLen + 1)) == 0)
{
_Error(182); // "Insufficient memory"
}
_FSeek(fchMemo, loc, FS_FROMBOF);
_FRead(fchMemo, memoContents, memoLen);
memoContents[memoLen] = '\0';
_RetChar(memoContents);
}
FoxInfo myFoxInfo[] = {
{"GETMEMO", (FPFI) FindMemoEx, 1, "R"},
};
FoxTable _FoxTable = {
(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};
Vea también
_AllocMemo( ) (Rutina de biblioteca API) | _DBReplace( ) (Rutina de biblioteca API) | _FindMemo( ) (Rutina de biblioteca API) | _MemoChan( ) (Rutina de biblioteca API) | Acceso a la API de Visual FoxPro