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 必须释放分配的内存来保留返回值。
当使用 pxAsyncHandle 和 pxFunctionResult 参数在单个回调中返回句柄数组和相应值时,也可以为 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;