適用対象: Excel 2013 | Office 2013 | Visual StudioApplies to: Excel 2013 | Office 2013 | Visual Studio

スタック上の空き領域を確認します。Checks the amount of space left on the stack.

Excel12(xlStack, LPXLOPER12 pxRes, 0);


この関数に引数はありません。This function takes no arguments.

プロパティ値/戻り値Property Value/Return Value

スタック上に残っているバイト数 (xltypeInt) を返します。Returns the number of bytes (xltypeInt) remaining on the stack.


最近のバージョンの使用可能なスタック領域の容量は、XLOPER の 16 ビットの符号付き整数に収まりません。つまり、xlStackXLOPER および Excel4 または Excel4v を使用して呼び出したときに -32767 から 32768 の間の値を返すことができる、ということです。この場合に正しい値を取得するには、戻り値を unsigned short 型にキャストします。The amount of available stack space of recent versions overflows the 16-bit signed integer of the XLOPER. This means that xlStack can return a value between -32767 and 32768 when called using XLOPERs and Excel4 or Excel4v. To obtain the correct value in this case, you must cast the returned value to an unsigned short.

Excel 2007 以降では、XLOPER12 および Excel12 または Excel12v を使用して、この関数を呼び出す必要があります。その場合、戻り値は使用可能なスタック領域の容量か、64 KB のいずれか小さい方になります。Starting in Excel 2007, you should call this function using XLOPER12s and Excel12 or Excel12v, in which case the returned value is amount of stack space available or 64 KB, whichever is the lesser.

Excel では、スタック上の空き領域に制限があります。この容量を超えないように注意する必要があります。非常に大きなデータ構造を配置したり、可能な限り多くのローカル変数を静的にしてはいけません。関数を再帰的に呼び出さないようにしてください。これを行うと、スタックがすぐにいっぱいになります。Excel has a limited amount of space on the stack, and you should take care not to overrun this space. Never put very large data structures on the stack, and make as many local variables as possible static. Avoid calling functions recursively, because that will quickly fill up the stack.

スタックをオーバーランしている疑いがある場合は、この関数を頻繁に呼び出して、スタック領域がどの程度残っているか確認します。If you suspect that you are overrunning the stack, call this function frequently to see how much stack space is left.


最初の例では、スタックの空き領域の容量が示された警告メッセージが表示されます。これは \SAMPLES\EXAMPLE\EXAMPLE.C に格納されています。2 番目の例も同じことをします (XLOPER を使用)。これは SDK のコード例には含まれていません。The first example displays an alert message containing the amount of stack space left and is contained in \SAMPLES\EXAMPLE\EXAMPLE.C. The second example does the same thing, working with XLOPERs and is not contained in the SDK example code.

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;

関連項目See also