xlAsyncReturn

适用于:Excel 2013 | Office 2013 | Visual Studio

用于返回异步用户定义函数的结果, (UDF) 。

Excel12(xlAsyncReturn, LPXLOPER12 pxRes, 2, LPXLOPER12 pxAsyncHandle, LPXLOPER12 pxFunctionResult);

参数

pxAsyncHandle (xltypeBigData)

返回结果的 UDF 的异步句柄。

pxFunctionResult

UDF 的返回值。

属性值/返回值

如果成功,则返回 true (xltypeBool) 。 如果失败,则返回 FALSE

备注

xlAsyncReturn 是 Excel 在重新计算期间允许对非计算线程的唯一回调。 异步 UDF 的异步部分不得执行 xlAsyncReturn 以外的任何回调。 XLL 必须释放分配的内存来保留返回值。

当使用 pxAsyncHandlepxFunctionResult 参数在单个回调中返回句柄数组和相应值时,也可以为 xltypeMulti 类型。 使用单个回调时,传递指向XLOPER12结构的LPXLOPER12,这些结构包含包含异步句柄和返回值的一维数组。 这些数组的顺序必须与 Excel 正确匹配异步句柄及其相应值。

以下示例演示如何使用 xlAsyncReturn 进行批处理调用。

int batchSize = 10;
    LPXLOPER12 pHandles = new XLOPER12[batchSize];
    LPXLOPER12 pValues = new XLOPER12[batchSize];
    /*Add code to fill in LPXLOPER12 arrays (pHandles and pValues)
    with the XOPER12 structures that contain the asynchronous handles
    and values, in respective order*/
    //Create an XLOPER12 of type xltypeMulti, and fill the Handle array
    XLOPER12 handleArray;
    handleArray.xltype = xltypeMulti;
    handleArray.val.array.rows = 1;
    handleArray.val.array.columns = (COL)batchSize;
    handleArray.val.array.lparray = pHandles;
    
    //Create an XLOPER12 if type xltypeMulti, and fill the Values array
    XLOPER12 valueArray;
    valueArray.xltype = xltypeMulti;
    valueArray.val.array.rows = 1;
    valueArray.val.array.columns = (COL)batchSize;
    valueArray.val.array.lparray = pValues;
    //Make the callback with the return value
    int ret = Excel12(xlAsyncReturn, 0, 2, &handleArray, &valueArray);
    //Add code to free the allocated memory here (pHandles, pValues, valueArray, handleArray)
    return ret;

另请参阅