Возвращает индекс таблицы имен, соответствующий данному имени name, или возвращает - 1, если этого имени нет в таблице.
NTI _NameTableIndex(char FAR *name) char FAR *name; /* Имя. */ |
Примечания
Имя name можно найти в таблице имен даже в том случае, когда переменной с именем name не существует. Чтобы определить, существует ли переменная с именем name, воспользуйтесь _FindVar( ), задав в качестве параметра nti индекс таблицы имен, возвращенный _NameTableIndex( ).
Для получения дополнительной информации о том, как создавать библиотеку API и интегрировать её в Visual FoxPro, смотрите Доступ к API Visual FoxPro.
Пример
В следующем примере освобождается переменная памяти, имя которой задано в виде символьного аргумента. Заметьте, что _NameTableIndex( ) находит имя переменной даже после того, как она освобождена. Поэтому с помощью _NameTableIndex( ), используемой в сочетании с _FindVar( ), можно проверить, определена ли переменная в данный момент.
Код Visual FoxPro
Copy Code | |
|---|---|
SET LIBRARY TO NTI
x = 123
= XRELEASE("x") | |
Код C
Copy 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
}; | |
Смотрите также
Справочное руководство
Процедура библиотеки API _ALen( )Процедура библиотеки API _FindVar( )
Процедура библиотеки API _Load( )
Процедура библиотеки API _NewVar( )
Процедура библиотеки API _ObjectRelease( )
Процедура библиотеки API _Store( )
Концепции
Процедуры библиотеки API от A до ZПрочие ресурсы
Доступ к API Visual FoxProПроцедуры библиотеки API по категориям
© Microsoft Corporation. All rights reserved. Microsoft is not reponsible for the contents of the translated help topics.