_NameTableIndex( ), API-Bibliotheksroutine
Gibt den Namenstabellenindex zurück, der einem bestimmten Wert für name entspricht, oder den Wert -1, wenn dieser Name nicht in der Namenstabelle enthalten ist.
NTI _NameTableIndex(char FAR *name)
char FAR *name; /* Name. */
Hinweise
Selbst wenn keine Variable mit dem Namen name existiert, kann name in der Namenstabelle gefunden werden. Mit _FindVar( ) stellen Sie fest, ob eine Variable mit dem Namen name existiert, indem Sie den Index der Namenstabelle angeben, der von _NameTableIndex( ) als nti-Parameter zurückgegeben wird.
Weitere Informationen zum Erstellen einer API-Bibliothek und ihrer Integration in Visual FoxPro finden Sie unter Zugreifen auf die Visual FoxPro-API.
Beispiel
Im folgenden Beispiel wird eine Speichervariable freigegeben, deren Name als Zeichenargument angegeben ist. _NameTableIndex( ) bestimmt den Variablennamen, nachdem die Variable freigegeben wurde. Daher wird _NameTableIndex( ) zusammen mit _FindVar( ) verwendet, um sicherzustellen, dass die Speichervariable momentan definiert ist.
Visual FoxPro-Code
SET LIBRARY TO NTI
x = 123
= XRELEASE("x")
C-Code
#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
};
Siehe auch
_ALen( ), API-Bibliotheksroutine | _FindVar( ), API-Bibliotheksroutine | _Load( ), API-Bibliotheksroutine | _NewVar( ), API-Bibliotheksroutine | _ObjectRelease( ), API-Bibliotheksroutine | _Store( ) API-Bibliotheksroutine | Zugreifen auf die Visual FoxPro-API