Поделиться через


xlfUnregister (форма 1)

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

Может вызываться из команды DLL или XLL, которая была вызвана Microsoft Excel. Это эквивалентно вызову UNREGISTER из листа макросов XLM Excel.

xlfUnregister можно вызывать в двух формах:

  • Форма 1. Отмена регистрации отдельной команды или функции.

  • Форма 2. Выгружает и деактивирует XLL.

Эта функция, вызываемая в форме 1, уменьшает количество использования функции или команды DLL, которые ранее были зарегистрированы с помощью xlfRegister или REGISTER. Если количество использования уже равно нулю, эта функция не оказывает влияния. Когда количество использования всех функций в библиотеке DLL достигает нуля, библиотека DLL выгружается из памяти.

xlfRegister (форма 1) также определяет скрытое имя, которое является текстовым аргументом функции pxFunctionText и вычисляется по идентификатору регистрации функции или команды. При отмене регистрации функции это имя должно быть удалено с помощью xlfSetName , чтобы имя функции больше не отображалось мастером функций. Дополнительные сведения см. в статье Известные проблемы, возникающие при разработке XLL для Excel.

Excel4(xlfUnregister, LPXLOPER pxRes, 1, LPXLOPER pxRegisterId);

Параметры

pxRegisterId (xltypeNum)

Идентификатор регистрации незарегистрированной функции.

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

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

Замечания

Идентификатор регистрации функции возвращается xlfRegister при первой регистрации функции. Его также можно получить, вызвав функцию xlfRegisterId или функцию xlfEvaluate. Обратите внимание, что xlfRegisterId пытается зарегистрировать функцию, если она еще не зарегистрирована. По этой причине, если вы только пытаетесь получить идентификатор, чтобы отменить регистрацию функции, лучше получить его, передав зарегистрированное имя в xlfEvaluate. Если функция не зарегистрирована, xlfEvaluate завершается сбоем с #NAME? Ошибка.

Пример

См. код функции fExit в \SAMPLES\GENERIC\GENERIC.C.

int WINAPI fExit(void)
{
   XLOPER12  xDLL,    // The name of this DLL //
   xFunc,             // The name of the function //
   xRegId;            // The registration ID //
   int i;
//
// This code gets the DLL name. It then uses this along with information
// from g_rgFuncs[] to obtain a REGISTER.ID() for each function. The
// register ID is then used to unregister each function. Then the code
// frees the DLL name and calls xlAutoClose.
//
   // Make xFunc a string //
   xFunc.xltype = xltypeStr;
   Excel12f(xlGetName, &xDLL, 0);
   for (i = 0; i < g_rgWorksheetFuncsRows; i++)
   {
      xFunc.val.str = (LPWSTR) (g_rgWorksheetFuncs[i][0]);
      Excel12f(xlfRegisterId,&xRegId,2,(LPXLOPER12)&xDLL,(LPXLOPER12)&xFunc);
      Excel12f(xlfUnregister, 0, 1, (LPXLOPER12) &xRegId);
   }
   for (i = 0; i < g_rgCommandFuncsRows; i++)
   {
      xFunc.val.str = (LPWSTR) (g_rgCommandFuncs[i][0]);
      Excel12f(xlfRegisterId,&xRegId,2,(LPXLOPER12)&xDLL,(LPXLOPER12)&xFunc);
      Excel12f(xlfUnregister, 0, 1, (LPXLOPER12) &xRegId);
   }
   Excel12f(xlFree, 0, 1,  (LPXLOPER12) &xDLL);
   return xlAutoClose();
}

См. также