Compartilhar via


xlStack

Aplica-se a: Excel 2013 | Office 2013 | Visual Studio

Verifica a quantidade de espaço deixada na pilha.

Excel12(xlStack, LPXLOPER12 pxRes, 0);

Parâmetros

Essa função não usa argumentos.

Valor de propriedade/Valor de retorno

Retorna o número de bytes (xltypeInt) restantes na pilha.

Comentários

A quantidade de espaço de pilha disponível das versões recentes transborda o inteiro assinado de 16 bits do XLOPER. Isso significa que xlStack pode retornar um valor entre -32767 e 32768 quando chamado usando XLOPERs e Excel4 ou Excel4v. Para obter o valor correto nesse caso, você deve lançar o valor retornado para um curto sem sinal.

A partir do Excel 2007, você deve chamar essa função usando XLOPER12s e Excel12 ou Excel12v, nesse caso, o valor retornado é a quantidade de espaço de pilha disponível ou 64 KB, o que for menor.

O Excel tem uma quantidade limitada de espaço na pilha e você deve tomar cuidado para não ultrapassar esse espaço. Nunca coloque estruturas de dados muito grandes na pilha e torne o maior número possível de variáveis locais estáticos. Evite chamar funções de forma recursiva, pois isso preencherá rapidamente a pilha.

Se você suspeitar que está ultrapassando a pilha, chame essa função com frequência para ver quanto espaço de pilha resta.

Exemplo

O primeiro exemplo exibe uma mensagem de alerta que contém a quantidade de espaço de pilha à esquerda e está contida em \SAMPLES\EXAMPLE\EXAMPLE.C. O segundo exemplo faz a mesma coisa, trabalhando com XLOPERs e não está contido no código de exemplo do 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;
}

Confira também