xlAsyncReturn

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

Используется для возврата результата асинхронной определяемой пользователем функции (UDF).

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

Параметры

pxAsyncHandle (xltypeBigData)

Асинхронный дескриптор определяемой пользователем функции, в которую возвращается результат.

pxFunctionResult

Возвращаемое значение UDF.

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

В случае успешного выполнения возвращает значение TRUE (xltypeBool). В случае неудачи возвращает значение FALSE.

Замечания

xlAsyncReturn — это единственный обратный вызов, который Excel допускает для потоков, не относящихся к вычислению, во время пересчета. Асинхронная часть асинхронной UDF не должна выполнять обратные вызовы, кроме xlAsyncReturn. XLL должен освободить память, выделенную для хранения возвращаемого значения.

Параметры pxAsyncHandle и pxFunctionResult также могут иметь тип xltypeMulti , если они используются для возврата массива дескрипторов и соответствующих значений в одном обратном вызове. При использовании одного обратного вызова передайте LPXLOPER12, указывающий на XLOPER12 структуры, содержащие одномерные массивы, содержащие асинхронные дескрипторы и возвращаемые значения. Эти массивы должны находиться в одном порядке, чтобы 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;

См. также