xlStack
S’applique à: Excel 2013 | Office 2013 | Visual Studio
Vérifie la quantité d’espace restant sur la pile.
Excel12(xlStack, LPXLOPER12 pxRes, 0);
Paramètres
Cette fonction ne prend aucun argument.
Valeur de propriété/valeur de renvoi
Retourne le nombre d’octets (xltypeInt) restants sur la pile.
Remarques
La quantité d’espace de pile disponible des versions récentes dépasse l’entier signé 16 bits du XLOPER. Cela signifie que xlStack peut retourner une valeur comprise entre -32767 et 32768 lorsqu’elle est appelée à l’aide de XLOPERs et Excel4 ou Excel4v. Pour obtenir la valeur correcte dans ce cas, vous devez convertir la valeur retournée en un short non signé.
À partir d’Excel 2007, vous devez appeler cette fonction à l’aide de XLOPER12et Excel12 ou Excel12v, auquel cas la valeur retournée est la quantité d’espace de pile disponible ou 64 Ko, la valeur la plus faible étant retenue.
Excel dispose d’une quantité limitée d’espace sur la pile, et vous devez veiller à ne pas dépasser cet espace. Ne placez jamais de structures de données très volumineuses sur la pile et rendez statiques autant de variables locales que possible. Évitez d’appeler des fonctions de manière récursive, car cela remplira rapidement la pile.
Si vous pensez que vous effectuez un dépassement de la pile, appelez cette fonction fréquemment pour voir la quantité d’espace de pile restante.
Exemple
Le premier exemple affiche un message d’alerte contenant la quantité d’espace de pile restante et est contenu dans \SAMPLES\EXAMPLE\EXAMPLE.C
. Le deuxième exemple fait la même chose, en travaillant avec XLOPERet n’est pas contenu dans l’exemple de code du SDK.
short WINAPI xlStackExample(void)
{
XLOPER12 xRes;
Excel12(xlStack, &xRes, 0);
Excel12(xlcAlert, 0, 1, (LPXLOPER12)&xRes);
return 1;
}
short int WINAPI xlStackExample_XLOPER(void)
{
XLOPER xRes;
Excel4(xlStack, (LPXLOPER)&xRes, 0);
xRes.xltype = xltypeNum; // Change the type to double
// Cast to an unsigned short to get rid of the overflow problem
xRes.val.num = (double)(unsigned short) xRes.val.w;
Excel4(xlcAlert, 0, 1, (LPXLOPER)& xRes);
return 1;
}