_FindVar( ) (Rutina de biblioteca API)

Proporciona un método para inicializar el localizador de manera que pueda utilizar _Store( ) para colocar los datos en una variable de memoria o en un campo existentes.

int _FindVar(NTI nti, int where, Locator FAR *loc)
NTI nti;                     /* NTI number of variable or field. */
int where;                  /* Work area number. */
Locator FAR *loc;            /* Locator. */

Observaciones

_FindVar( ) rellena el localizador transferido con información relativa a una variable o un campo denominados nti que existen en un área de trabajo especificada por where.

  • Si where es – 1, se supone que nti es una variable de memoria.
  • Si where está comprendido en el rango 1 – 225, se supone que nti es un campo del área de trabajo del número especificado.
  • Si where es 0, _FindVar comprueba primero para ver si nti es una variable de memoria. Si no se trata de ninguna variable de memoria, el área de trabajo actual se comprueba en busca de un campo con el NTI especificado.

_FindVar( ) devuelve verdadero (un entero distinto de 0) si se encuentra una variable o un campo nti en where; de lo contrario, _FindVar( ) devuelve falso (0).

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 muestra el valor de una variable de Visual FoxPro de una manera muy indirecta.

Código Visual FoxPro

SET LIBRARY TO FINDVAR 
TestVar= "This is a test"
= QMARK("TestVar")

Código C

#include <pro_ext.h>

void putLong(long n)
{
   Value val;

   val.ev_type = 'I';
   val.ev_long = n;
   val.ev_width = 10;

   _PutValue(&val);
}

FAR NameTableIndexEx(ParamBlk FAR *parm)
{
   NTI nti;
   char FAR *name;
   Locator loc;
   Value val;

//   Null terminate character string, name of variable
   if (!_SetHandSize(parm->p[0].val.ev_handle, 
      parm->p[0].val.ev_length+1))
   {
      _Error(182); // "Insufficient memory"
   }
   _HLock(parm->p[0].val.ev_handle);
   name = (char FAR *) _HandToPtr(parm->p[0].val.ev_handle);
   name[parm->p[0].val.ev_length] = '\0';

   nti = _NameTableIndex(name);

   _FindVar(nti, 0, &loc);
   _Load(&loc, &val);
   _PutValue(&val);
}

FoxInfo myFoxInfo[] = {
   {"QMARK", (FPFI) NameTableIndexEx, 1, "C"},
};
FoxTable _FoxTable = {
   (FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};

Vea también

_ALen( ) (Rutina de biblioteca API) | _Load( ) (Rutina de biblioteca API) | _NameTableIndex( ) (Rutina de biblioteca API) | _NewVar( ) (Rutina de biblioteca API) | _ObjectRelease( ) (Rutina de biblioteca API) | _Store( ) (Rutina de biblioteca API)