xlAutoClose
Aplica-se a: Excel 2013 | Office 2013 | Visual Studio
Chamada pelo Microsoft Excel sempre que o XLL está desativado. O suplemento é desativado quando a sessão do Excel termina normalmente. O suplemento pode ser desativado pelo usuário durante uma sessão do Excel e, nesse caso, essa função será chamada.
O Excel não requer um XLL para implementar e exportar essa função, embora seja recomendável para que o XLL possa cancelar o registro de comandos e funções, liberar recursos, desfazer personalizações e assim por diante. Se as funções e comandos não forem explicitamente registrados pelo XLL, o Excel executa isso depois de chamar a função xlAutoClose.
int WINAPI xlAutoClose(void);
Parâmetros
Essa função não usa argumentos.
Valor de propriedade/Valor de retorno
A implementação dessa função deve retornar 1 (int).
Comentários
O Excel chama a função xlAutoClose sempre que o XLL está desativado, ou seja, não está carregado na memória. O XLL é desativado nas seguintes situações:
No final normal de uma sessão do Excel, se for ativado durante a sessão.
Se for explicitamente descarregado durante uma sessão do Excel.
Um XLL pode ser descarregado de várias maneiras:
Usando o Gerenciador de Suplemento.
A partir de outro XLL que chama xlfUnregister com o nome dessa DLL como o único argumento.
A partir de uma planilha de macro XLL que chama xlfUnregister com o nome dessa DLL como o único argumento.
Esta função deve fazer o seguinte:
Remova os menus ou itens de menu adicionados pelo XLL.
Execute qualquer limpeza global necessária.
Exclua os nomes foram criados, especialmente nomes de funções exportadas. Lembre-se de que registrar funções pode causar a criação de alguns nomes, se o quarto argumento REGISTER estiver presente.
Exemplo
Consulte os arquivos SAMPLES\EXAMPLE\EXAMPLE.C
e SAMPLES\GENERIC\GENERIC.C
, por exemplo, implementações dessa função. O código a seguir é de SAMPLES\GENERIC\GENERIC.C
.
int WINAPI xlAutoClose(void)
{
int i;
XLOPER12 xRes;
//
// This block first deletes all names added by xlAutoOpen or
// xlAutoRegister12. Next, it checks if the drop-down menu Generic still
// exists. If it does, it is deleted using xlfDeleteMenu. It then checks
// if the Test toolbar still exists. If it is, xlfDeleteToolbar is
// used to delete it.
//
// The following code to delete the defined names
// does not work in the current version of Excel.
// You cannot delete these names once they are Registered.
// The code is left here in case the functionality becomes
// available in a future version.
//
for (i = 0; i < g_rgWorksheetFuncsRows; i++)
Excel12f(xlfSetName, 0, 1, TempStr12(g_rgWorksheetFuncs[i][2]));
for (i = 0; i < g_rgCommandFuncsRows; i++)
Excel12f(xlfSetName, 0, 1, TempStr12(g_rgCommandFuncs[i][2]));
//
// Everything else works as documented.
//
Excel12f(xlfGetBar, &xRes, 3, TempInt12(10), TempStr12(L"Generic"), TempInt12(0));
if (xRes.xltype != xltypeErr)
{
Excel12f(xlfDeleteMenu, 0, 2, TempNum12(10), TempStr12(L"Generic"));
// Free the XLOPER12 returned by xlfGetBar //
Excel12f(xlFree, 0, 1, (LPXLOPER12) &xRes);
}
Excel12f(xlfGetToolbar, &xRes, 2, TempInt12(7), TempStr12(L"Test"));
if (xRes.xltype != xltypeErr)
{
Excel12f(xlfDeleteToolbar, 0, 1, TempStr12(L"Test"));
// Free the XLOPER12 returned by xlfGetToolbar //
Excel12f(xlFree, 0, 1, (LPXLOPER12) &xRes);
}
return 1;
}