xlfUnregister (形式 1)
適用対象: Excel 2013 | Office 2013 | Visual Studio
Microsoft Excel から直接呼び出すように、 DLL コマンドや XLL コマンドを使って呼び出すことができます。 これは、UNREGISTER を Excel XLM マクロ シートから呼び出すのと同等です。
xlfUnregister 関数は、次の 2 つの形式で呼び出すことができます。
形式 1: 個々のコマンドや関数の登録を解除します。
形式 2: XLL のアンロードと非アクティブ化を行います。
フォーム 1 で呼び出されたこの関数は、 xlfRegister または REGISTER を使用して以前に登録された DLL 関数またはコマンドの使用数を減らします。 使用量の数が既に 0 の場合、この関数は効果がありません。 DLL 内のすべての関数の使用カウントが 0 に達すると、DLL はメモリからアンロードされます。
xlfRegister (形式 1) は、関数またはコマンドの登録 ID ともみなされる非表示名 (関数のテキスト引数 pxFunctionText ) も定義します。 関数の登録を解除する場合は、関数ウィザードにその関数の名前が表示されなくなるように、xlfSetName を使用してこの名前を削除する必要があります。 詳しくは、「Excel XLL 開発での既知の問題」をご覧ください。
Excel4(xlfUnregister, LPXLOPER pxRes, 1, LPXLOPER pxRegisterId);
パラメーター
pxRegisterId (xltypeNum)
登録を解除する関数の登録 ID。
プロパティ値/戻り値
成功した場合は TRUE (xltypeBool) を返します。それ以外の場合は FALSE を返します。
注釈
関数の登録 ID は、関数の最初の登録時に xlfRegister によって返されます。 また、xlfRegisterId 関数 または xlfEvaluate 関数を呼び出して取得することもできます。 関数がまだ登録されていない場合は、xlfRegisterId はその関数を登録しようとすることにご注意ください。 このため、単に関数の登録を解除する目的で ID を取得しようとしているのであれば、登録された名前を xlfEvaluate に渡して ID を取得することをお勧めします。 関数が登録されていない場合、 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();
}