xlStack

Область применения: Excel 2013 | Office 2013 | Visual Studio

Проверяет объем пространства, остающегося в стеке.

Excel12(xlStack, LPXLOPER12 pxRes, 0);

Параметры

Эта функция не получает никаких аргументов.

Значение свойства и возвращаемое значение

Возвращает количество байтов (xltypeInt), оставшихся в стеке.

Замечания

Объем доступного пространства стека последних версий превышает 16-разрядное целое число со знаком XLOPER. Это означает, что xlStack может возвращать значение от -32767 до 32768 при вызове с помощью XLOPERs и Excel4 или Excel4v. Чтобы получить правильное значение в этом случае, необходимо привести возвращаемое значение к короткому без знака.

Начиная с Excel 2007, эту функцию следует вызывать с помощью XLOPER12и Excel12 или Excel12v. В этом случае возвращаемое значение — это объем свободного пространства стека или 64 КБ, в зависимости от того, что меньше.

В Excel имеется ограниченное пространство в стеке, и вы должны позаботиться о том, чтобы не заполнить это пространство. Никогда не помещайте в стек очень большие структуры данных и делайте как можно больше локальных переменных статическими. Избегайте рекурсивного вызова функций, так как это быстро заполняет стек.

Если вы подозреваете, что вы переполняете стек, часто вызывайте эту функцию, чтобы узнать, сколько места в стеке осталось.

Пример

В первом примере отображается оповещение, содержащее оставшееся пространство стека и содержащееся в \SAMPLES\EXAMPLE\EXAMPLE.C. Второй пример выполняет то же самое, работая с XLOPERs и не содержится в примере кода пакета 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;
}

См. также