HOW TO: How do I decide, at run time, which functions to register?
Reference: Q0006
Article last modified on 3-Jul-2002
The information in this article applies to:
- XLL+ for Visual Studio 6 - 3, 4.1, 4.2, 4.3.1
- XLL+ for Visual Studio .NET - 3, 4.1, 4.2, 4.3.1
- Excel - all versions
How do I decide, at run time, which functions to register?
Issue
Any add-in function that has been made available to Excel using the IMPLEMENT_XLLFN2() macro is automatically registered when the XLL is opened. Sometimes it is useful to disable this behavior, and only register selected functions.
Summary
- The list of automatically registered functions is constructed by a call to AddStaticFns() during the CXllApp::InitInstance() virtual function.
- Call CXllApp::RemoveFn(exported_function_name) after the call to AddStaticFns().
- The argument to RemoveFn() should be the exported name of the function (as it appears in Excel).
Example
In the example below, a decision is made at run time (based on the time) to exclude a list of functions from being exposed in Excel.
BOOL CPartialRegApp::InitInstance() { // Call the base class if ( !CXllApp::InitInstance() ) return FALSE; // Set the name of the library to the default value m_stName = m_pszDefName; // Add the statically defined function specifications AddStaticFns(); // Based on the time, decide whether or not to exclude // some functions time_t tm1; struct tm* tm2; tm1 = time(0); tm2 = localtime(&tm1); BOOL bExclude = (tm2->tm_min % 2 == 0); // Optionally exclude some functions const char* apszOptionalFns[] = { "OptionalFn1", "OptionalFn2", 0 }; if (bExclude) { for (int i = 0; apszOptionalFns[i]; i++) RemoveFn(apszOptionalFns[i]); } return TRUE; }