Создает переменную или массив.
NTI _NewVar(char FAR *name, Locator FAR *loc, int flag) char FAR *name; /* Имя переменной. */ Locator FAR *loc; /* Местоположение. */ int flag; /* Область действия. */ |
Примечания
Определение типа NTI поддерживает индекс таблицы имен. Смотрите Процедура библиотеки API _NameTableIndex( ) для получения дополнительной информации об использовании индекса таблицы имен.
Имя переменной или массива должно подчиняться стандартным правилам именования переменных, принятым в Visual FoxPro. Новая переменная инициализируется логическим значением "ложь".
Установка поля l_subs структуры Locator определяет тип переменной или массива:
-
0 – скалярная переменная
-
1 – одномерный массив размером l_sub1
-
2 – двумерный массив размером l_sub1 на l_sub2
В качестве параметра flag можно использовать NV_PUBLIC или NV_PRIVATE. Переменные типа NV_PRIVATE создаются так, как они создавались бы в программе Visual FoxPro, вызвавшей данную внешнюю программу.
Если _NewVar( ) ) успешно создала переменную, в поле l_NTI заносится неотрицательный номер NTI созданной переменной и _NewVar( ) возвращает этот номер. Если _NewVar( ) завершается неудачно, возвращается отрицательное число, абсолютное значение которого представляет собой внутренний номер ошибки Visual FoxPro.
Для получения дополнительной информации о том, как создавать библиотеку API и интегрировать её в Visual FoxPro, смотрите Доступ к API Visual FoxPro.
Пример
В следующем примере _NewVar( ) используется для создания трех переменных.
Код Visual FoxPro
Copy Code | |
|---|---|
SET LIBRARY TO NEWVAR
*
* As defined in "pro_ext.h"
*
#define NV_PUBLIC 0
#define NV_PRIVATE 1
= xNewVar('var', 0, 0, 0, NV_PUBLIC)
DISPLAY MEMORY LIKE var
= xNewVar('onedim', 1, 5, 0, NV_PUBLIC)
DISPLAY MEMORY LIKE onedim
= xNewVar('twodim', 2, 5, 6, NV_PUBLIC)
DISPLAY MEMORY LIKE twodim | |
Код C
Copy Code | |
|---|---|
#include <pro_ext.h>
void FAR NewVarEx(ParamBlk FAR *parm)
{
char FAR *varName;
Locator loc;
int flag;
int retValue;
// Null terminate character string
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);
varName = (char FAR *) _HandToPtr(parm->p[0].val.ev_handle);
varName[parm->p[0].val.ev_length] = '\0';
loc.l_subs = parm->p[1].val.ev_long;
loc.l_sub1 = parm->p[2].val.ev_long;
loc.l_sub2 = parm->p[3].val.ev_long;
flag = parm->p[4].val.ev_long;
if ((retValue = _NewVar(varName, &loc, flag)) < 0)
{
// _NewVar() returns negative Visual FoxPro error number
_Error(-retValue);
}
_HUnLock(parm->p[0].val.ev_handle);
}
FoxInfo myFoxInfo[] = {
{"XNEWVAR", (FPFI) NewVarEx, 5, "C,I,I,I,I"},
};
FoxTable _FoxTable = {
(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
}; | |
Смотрите также
Справочное руководство
Процедура библиотеки API _ALen( )Процедура библиотеки API _FindVar( )
Процедура библиотеки API _Load( )
Процедура библиотеки API _NameTableIndex( )
Процедура библиотеки 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.