xlAsyncReturn
Aplica-se a: Excel 2013 | Office 2013 | Visual Studio
Usado para retornar o resultado de uma UDF (função definida pelo usuário) assíncrona.
Excel12(xlAsyncReturn, LPXLOPER12 pxRes, 2, LPXLOPER12 pxAsyncHandle, LPXLOPER12 pxFunctionResult);
Parâmetros
pxAsyncHandle (xltypeBigData)
O identificador assíncrono da UDF ao qual o resultado é retornado.
pxFunctionResult
O valor retornado da UDF.
Valor de propriedade/Valor de retorno
Se for bem-sucedido, retornará TRUE (xltypeBool). Se não tiver êxito, retornará FALSE.
Comentários
xlAsyncReturn é o único retorno de chamada que o Excel permite em threads que não são de cálculo durante o recálculo. A parte assíncrona de uma UDF assíncrona não deve executar nenhum retorno de chamada diferente de xlAsyncReturn. A XLL deve liberar a memória alocada para manter o valor retornado.
Os parâmetros pxAsyncHandle e pxFunctionResult também podem ser do tipo xltypeMulti quando usados para retornar uma matriz de identificadores e valores correspondentes em um único retorno de chamada. Ao usar um retorno de chamada único, passe um LPXLOPER12 que aponta para XLOPER12 estruturas que contêm matrizes unidimensionais que contêm os identificadores assíncronos e os valores retornados. Essas matrizes devem estar na mesma ordem para que o Excel corresponda corretamente a um identificador assíncrono com o valor correspondente.
O exemplo a seguir mostra como você pode fazer uma chamada em lote usando 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;