Позволяет инициализировать локатор, чтобы с помощью _Store( ) можно было заносить данные в существующую переменную памяти или поле.
int _FindVar(NTI nti, int where, Locator FAR *loc) NTI nti; /* Номер NTI переменной или поля. */ int where; /* Номер рабочей области. */ Locator FAR *loc; /* Локатор. */ |
Примечания
_FindVar( ) заполняет переданный локатор информацией о переменной или поле с именем nti, которое принадлежит рабочей области, заданной номером where.
-
Если where равно – 1, считается, что nti задает переменную памяти.
-
Если where принадлежит диапазону от 1 до 225, считается, что nti задает поле в рабочей области с указанным номером.
-
Если where равно 0, _FindVar сначала проверяет, является ли nti переменной памяти. Если это не переменная памяти, проверяется текущая рабочая область на наличие в ней поля с заданным NTI.
_FindVar( ) возвращает значение "истина" (целое число, отличное от 0), если переменную или поле с номером nti удалось найти в рабочей области where; иначе _FindVar( ) возвращает "ложь" (0).
Для получения дополнительной информации о том, как создавать библиотеку API и интегрировать её в Visual FoxPro, смотрите Доступ к API Visual FoxPro.
Пример
следующем примере отображается значение переменной Visual FoxPro, для чего используется окольный путь.
Код Visual FoxPro
Copy Code | |
---|---|
SET LIBRARY TO FINDVAR TestVar= "This is a test" = QMARK("TestVar") |
Код C
Copy Code | |
---|---|
#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 }; |