xlAutoClose

Относится к: Excel 2013 | Office 2013 | Visual Studio

Вызывается приложением Microsoft Excel при каждом отключении XLL. Надстройка отключается после нормального завершения сеанса Excel. Надстройку может отключить пользователь во время сеанса Excel, что также потянет за собой вызов этой функции.

Для внедрения и экспорта этой функции в приложении Excel надстройка XLL не обязательна, но рекомендована: с помощью XLL можно отключать функции и команды, освобождать ресурсы, отменять настройки и т. д. Если надстройка XLL не отключает функции и команды явным образом, это делает Excel после вызова функции xlAutoClose.

int WINAPI xlAutoClose(void);

Параметры

Эта функция не получает никаких аргументов.

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

Внедрении этой функции должно возвратить значение 1 (int).

Замечания

Excel вызывает функцию xlAutoClose каждый раз, когда надстройка XLL отключается (то есть выгружается из памяти). Надстройка XLL отключается в перечисленных ниже ситуациях:

  • При нормальном завершении сеанса Excel, во время которого она была активна.

  • Если она была явным образом выгружена из памяти во время сеанса Excel.

  • XLL может выгружаться несколькими способами:

  • С помощью диспетчера надстроек.

  • Из другой надстройки XLL, которая вызывает xlfUnregister, указывая имя этой библиотеки DLL в качестве единственного аргумента.

  • Из макроса XLM, который вызывает UNREGISTER, указывая имя этой библиотеки DLL в качестве единственного аргумента.

Эта функция должна выполнять следующее:

  • Удалять меню или элементы меню, которые были добавлены надстройкой XLL.

  • В случае надобности выполнять любую глобальную очистку.

  • Удалять какие-либо созданные имена, в частности имена экспортированных функций. Помните, что регистрация функций может привести к созданию некоторых имен, если присутствует четвертый аргумент для РЕГИСТРАЦИИ.

Пример

См. файлы SAMPLES\EXAMPLE\EXAMPLE.C и SAMPLES\GENERIC\GENERIC.C примеры реализации этой функции. Следующий код получен из 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, &amp;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) &amp;xRes);
   }
   Excel12f(xlfGetToolbar, &amp;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) &amp;xRes);
   }
   return 1;
}

См. также

Диспетчер надстроек xlAutoOpenи функции интерфейса XLL