_NewVar( ) (Rutina de biblioteca API)
Crea una variable o una matriz.
NTI _NewVar(char FAR *name, Locator FAR *loc, int flag)
char FAR *name; /* Variable name. */
Locator FAR *loc; /* Place. */
int flag; /* Scope. */
Observaciones
La definición de tipo NTI significa Name Table Index (Índice de tabla de nombres). Vea _NameTableIndex( ) (Rutina de biblioteca API) para obtener más información acerca del uso de Name Table Index.
El nombre de variable o matriz debe seguir las reglas estándar de Visual FoxPro para nombres de variable. La nueva variable se inicializa con el valor lógico Falso.
El valor del campo Locator l_subs determina el tipo de variable o matriz:
- 0 – una variable escalar
- 1 – una matriz unidimensional de tamaño l_sub1
- 2 – una matriz de tamaño l_sub1 por l_sub2. Para obtener más información acerca de cómo puede crear una biblioteca de API e integrarla en Visual FoxPro, consulte Acceso a la API de Visual FoxPro.
El parámetro flag puede ser NV_PUBLIC o NV_PRIVATE. Las variables NV_PRIVATE se crean como si las creara la rutina Visual FoxPro que llamó a la rutina externa.
Si _NewVar( ) crea la variable, el campo l_NTI se rellena con el NTI no negativo de la variable creada y _NewVar( ) devuelve este número. Si falla _NewVar( ), devuelve un entero negativo cuyo valor absoluto es un número de error interno de Visual FoxPro.
Para obtener más información acerca de cómo crear una biblioteca API e integrarla con Visual FoxPro, vea Acceso a la API de Visual FoxPro.
Ejemplo
El ejemplo siguiente utiliza _NewVar( ) para crear tres variables.
Código Visual FoxPro
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ódigo C
#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
};
Vea también
_ALen( ) (Rutina de biblioteca API) | _FindVar( ) (Rutina de biblioteca API) | _Load( ) (Rutina de biblioteca API) | _NameTableIndex( ) (Rutina de biblioteca API) | _ObjectRelease( ) (Rutina de biblioteca API) | _Store( ) (Rutina de biblioteca API) | Acceso a la API de Visual FoxPro