Returns the length of the specified memo field in the memo file for the current record.
long _MemoSize(Locator FAR *fld) Locator FAR *fld; /* Memo field address. */ |
Remarks
When the memo field for the current record is empty, or when fld isn't a memo field, _MemoSize(В ) returns a negative integer whose absolute value is a Visual FoxPro error number.
For more information on how to create an API library and integrate it with Visual FoxPro, see Accessing the Visual FoxPro API.
Example
The following example retrieves the contents of a memo field for the current record. _MemoSize(В ) is used to determine how much memory should be allocated for a buffer, and how many bytes should be read from the memo file.
Visual FoxPro Code
В | Copy Code |
---|---|
SET LIBRARY TO MEMOSIZE CREATE TABLE WMemo (MemoField M) APPEND BLANK REPLACE MemoField WITH "Hello, World." ? GETMEMO(@MemoField) |
C Code
В | Copy Code |
---|---|
#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 }; |