Возвращает индекс таблицы имен, соответствующий данному имени 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.