_Load( ) (Rutina de biblioteca API)

Coloca el valor de la variable de memoria o el campo de registro actual especificado por loc en val.

int _Load(Locator FAR *loc, Value FAR *val)
Locator FAR *loc;         /* Variable location. */
Value FAR *val;            /* Holds value of the variable. */

Observaciones

_Load( ) devuelve 0 si la rutina se ejecuta correctamente. Si la rutina falla, devuelve un entero negativo cuyo valor absoluto es un número de error de Visual FoxPro. Puede utilizar _Load( ) para recuperar el contenido de un campo memo, pero no recuperará caracteres del campo después de los primeros 65.000 bytes. Si loc especifica una matriz unidimensional, Visual FoxPro devuelve el valor del primer elemento de la matriz.

_Load( ) no funciona con objetos. Si loc especifica una referencia de objeto, _Load( ) devuelve 0 sin llenar la estructura de valores val. Utilice _Evaluate( ) para obtener una referencia de objeto.

Si el valor del campo Locator l_offset es – 1, Visual FoxPro devolverá una estructura de valor lógico que indica si se elimina el registro actual del área de trabajo especificada:

  • ev_length = .T. = DELETED( )

  • ev_length = .F. = NOT DELETED( )

    Nota   _Load( ) sólo crea un identificador cuando la variable de memoria que está cargando el programa es una cadena de caracteres (ev_type = 'C'). Los demás tipos de datos almacenan sus valores en la misma estructura Value. El programa debe liberar los identificadores creados con _Load( ).

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 ejemplo siguiente convierte a mayúsculas un argumento de cadena pasado por referencia.

Código Visual FoxPro

SET LIBRARY TO LOAD   
x = "abc"
= XUPPER(@x)
? x

Código C

#include <pro_ext.h>

void FAR Upper(ParamBlk FAR *parm)
{
      char FAR *pString;
      Value val;
      int i;
//
//   _Load() and _Store are the functions of interest for pass-by-reference.
//
   _Load(&parm->p[0].loc, &val);
//
//   FoxPro doesn't check the type of pass-by-reference arguments, so we do.
//
  if (val.ev_type != 'C')
   {
      _Error(9); // "Data type mismatch"
   }
  pString = _HandToPtr(val.ev_handle);

   for (i = 0; i < val.ev_length; i++)
   {
      if ('a' <= *pString && *pString <= 'z')
      {
         *pString += ('A' - 'a');
      }
      pString++;
   }
   _Store(&parm->p[0].loc, &val);
   // 
   // We need to free the handle that we created with  _LOAD()
   //
   _FreeHand(val.ev_handle);
}

FoxInfo myFoxInfo[] =
{
   {"XUPPER", (FPFI) Upper, 1, "R"},
};

FoxTable _FoxTable =
{
   (FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};

Vea también

_ALen( ) (Rutina de biblioteca API) | _FindVar( ) (Rutina de biblioteca API) | _NameTableIndex( ) (Rutina de biblioteca API) | _NewVar( ) (Rutina de biblioteca API) | _Release( ) | _Store( ) (Rutina de biblioteca API) | Acceso a la API de Visual FoxPro