Позволяет инициализировать локатор, чтобы с помощью _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
}; | |