Share via


_NameTableIndex( ) (Rutina de biblioteca API)

Devuelve el índice de tabla de nombres que corresponde a un nombre name específico o devuelve – 1 si ese nombre no está en la tabla de nombres.

NTI _NameTableIndex(char FAR *name)
char FAR *name;            /* Name. */

Observaciones

El nombre name puede encontrarse en la tabla de nombres aunque no exista una variable con el nombre name. Para determinar si existe una variable con el nombre name, utilice _FindVar( ) y especifique el índice de tabla de nombres devuelto por _NameTableIndex( ) como parámetro nti.

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 libera una variable de memoria cuyo nombre se da como argumento de carácter. Observe que _NameTableIndex( ) busca el nombre de la variable después de liberarse. Por consiguiente, _NameTableIndex( ) se utiliza en combinación con _FindVar( ) para comprobar que la variable de memoria está definida actualmente.

Código Visual FoxPro

SET LIBRARY TO NTI    
x = 123
= XRELEASE("x")

Código C

#include <pro_ext.h>

FAR ReleaseEx(ParamBlk FAR *parm)
{
   NTI nti;
   char FAR *name;
   int exitCode;
   Locator loc;

   //   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';

   if ((nti = _NameTableIndex(name)) == -1)
   {
      _HUnLock(parm->p[0].val.ev_handle);
      _UserError("Cannot find variable in name table.");
   }
   _HUnLock(parm->p[0].val.ev_handle);

   if (_FindVar(nti, -1, &loc))
   {
      _PutStr("\nVariable exists prior to _Release().");
   }
   if ((exitCode =_Release(nti)) < 0)
   {
      _Error(-exitCode);
   }

   _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';

   if ((nti = _NameTableIndex(name)) != -1)
   {
      _PutStr("\n_NameTableIndex() still finds variable \
         after it is released.");
   }
   _HUnLock(parm->p[0].val.ev_handle);

   if (!_FindVar(nti, -1, &loc))
   {
      _PutStr("\nVariable does not exist after _Release().");
   }
}

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

Vea también

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