Freigeben über


_Store( ) API-Bibliotheksroutine

Ersetzt die durch loc angegebene Speichervariable durch den Wert val.

int _Store(Locator FAR *loc, Value FAR *val)
Locator FAR *loc;            /* Memory variable locator. */
Value FAR *val;               /* Value to store. */

Hinweise

Verweisen Sie auf einzelne Arrayelemente, indem Sie l_subs auf die von Ihnen angegebene Anzahl von Indizes sowie l_sub1 und l_sub2 auf die tatsächlichen Indizes festlegen. Das erste Element eines Arrays erhält die Nummer 1. Wenn loc ein Array angibt und l_subs den Wert 0 hat, speichert _Store( ) den Wert für alle Arrayelemente in val.

_Store( ) gibt bei erfolgreicher Ausführung 0 zurück. Im Fehlerfall gibt _Store( ) eine negative ganze Zahl zurück, deren absoluter Wert eine Visual FoxPro-Fehlernummer darstellt. Wenn _Store( ) zum Speichern in ein Array nicht genügend Speicher zur Verfügung steht, besteht die Möglichkeit, dass die Werte mancher Arrayelemente festgelegt wurden, während andere Arrayelemente nicht festgelegt wurden.

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 wird ein durch einen Verweis übergebenes Zeichenfolgenargument in Großbuchstaben konvertiert.

Visual FoxPro-Code

SET LIBRARY TO STORE 
x = "abc"
= XUPPER(@x)
? x

C-Code

#include <pro_ext.h>

void FAR Upper(ParamBlk FAR *parm)
{
      char FAR *pString;
      Value val;
      int i;
//
//   _Load() and _Store are the functions of interest for pass-by-reference.
//
   _Load(&parm->p[0].loc, &val);
//
//   FoxPro doesn't check the type of pass-by-reference arguments, so we do.
//
   if (val.ev_type != 'C') {
      _Error(9); // "Data type mismatch"
   }
  pString = _HandToPtr(val.ev_handle);

   for (i = 0; i < val.ev_length; i++)  {
      if ('a' <= *pString && *pString <= 'z') {
         *pString += ('A' - 'a');
      }
      pString++;
   }
   _Store(&parm->p[0].loc, &val);
   // 
   // We need to free the handle that we created with  _LOAD()
   //
   _FreeHand(val.ev_handle);

}
FoxInfo myFoxInfo[] = {
   {"XUPPER", (FPFI) Upper, 1, "R"},
};
FoxTable _FoxTable = {
   (FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};

Siehe auch

_ALen( ), API-Bibliotheksroutine | _FindVar( ), API-Bibliotheksroutine | _Load( ), API-Bibliotheksroutine | _NameTableIndex( ), API-Bibliotheksroutine | _NewVar( ), API-Bibliotheksroutine | _ObjectRelease( ), API-Bibliotheksroutine