Compartir a través de


_AllocMemo( ) (Rutina de biblioteca API)

Asigna size bytes de espacio en el archivo memo para un campo e inserta el número del nuevo bloque en el registro asociado de la base de datos.

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. */

Observaciones

Cuando _AllocMemo( ) tiene éxito, devuelve la ubicación en el archivo para empezar a escribir. De lo contrario, devuelve – 1

Precaución   Escribir más de size bytes daña el archivo memo.

Si piensa reemplazar el campo memo con métodos directos, asegúrese de que su rutina llama a _AllocMemo( ) antes de escribir en el archivo memo, incluso si el nuevo valor es de la misma longitud o menor que el original. Esto evita problemas en situaciones multiusuario. _AllocMemo( ) reutiliza el espacio reservado previamente cuando es seguro hacerlo.

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 crea un nuevo campo memo de contenidos.

Código 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ódigo 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
};

Vea también

_DBReplace( ) (Rutina de biblioteca API) | _FindMemo( ) (Rutina de biblioteca API) | _MemoChan( ) (Rutina de biblioteca API) | _MemoSize( ) (Rutina de biblioteca API) | Acceso a la API de Visual FoxPro