_NewVar( ), API-Bibliotheksroutine
Erstellt eine Variable oder ein Array.
NTI _NewVar(char FAR *name, Locator FAR *loc, int flag)
char FAR *name; /* Variable name. */
Locator FAR *loc; /* Place. */
int flag; /* Scope. */
Hinweise
Die NTI-Typdefinition steht für den Namenstabellenindex. Weitere Informationen zur Verwendung von Namenstabellenindizes finden Sie unter _NameTableIndex( ), API-Bibliotheksroutine.
Der Name der Variablen oder des Arrays muss entsprechend den Standardregeln von Visual FoxPro für Variablennamen angegeben werden. Die neue Variable wird mit dem logischen Wert Falsch (.F.) initialisiert.
Die Einstellung des Locatorfeldes l_subs bestimmt den Typ der Variablen oder des Arrays:
- 0 - eine skalare Variable
- 1 - ein eindimensionales Array der Größe l_sub1
- 2 - ein Array der Größe l_sub1 mal l_sub2. Weitere Informationen zum Erstellen einer API-Bibliothek und ihrer Integration in Visual FoxPro finden Sie unter Zugreifen auf die Visual FoxPro-API.
Der flag-Parameter kann den Wert NV_PUBLIC oder NV_PRIVATE annehmen. Variablen vom Typ NV_PRIVATE werden so erstellt, als ob sie von der Visual FoxPro-Routine erstellt würden, die die externe Routine aufgerufen hat.
Wenn die Variable mit Hilfe von _NewVar( ) erfolgreich erstellt werden kann, wird das Feld l_NTI mit einem nicht negativen NTI-Wert der erstellten Variablen aufgefüllt. _NewVar( ) gibt diesen Wert zurück. Im Fehlerfall gibt _NewVar( ) eine negative ganze Zahl zurück, deren absoluter Wert eine interne Visual FoxPro-Fehlernummer darstellt.
Weitere Informationen zum Erstellen einer API-Bibliothek und ihrer Integration in Visual FoxPro finden Sie unter Zugreifen auf die Visual FoxPro-API.
Beispiel
Im folgenden Beispiel werden mit Hilfe von _NewVar( ) drei Variablen erstellt.
Visual FoxPro-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-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
};
Siehe auch
_ALen( ), API-Bibliotheksroutine | _FindVar( ), API-Bibliotheksroutine | _Load( ), API-Bibliotheksroutine | _NameTableIndex( ), API-Bibliotheksroutine | _ObjectRelease( ) API Library Routine | _Store( ) API-Bibliotheksroutine | Zugreifen auf die Visual FoxPro-API