Skip to content
Govert van Drimmelen edited this page May 3, 2015 · 8 revisions

The IntelliSense service loaded into an Excel process is a shared service that needs to be coordinated between independent add-ins. This page describes the how the IntelliSense library is designed to support correct operation even when multiple independent add-ins can provide IntelliSense services, and might be loaded and unloaded during a the Excel process lifetime.

IntelliSense Providers

An add-in that provides registration information for UDF functions to the IntelliSense mechanism is an "IntelliSense Provider". All Excel-DNA add-ins since v 0.32 are IntelliSense Providers through the GetFunctionRegistrationInfo() feature. In future we might make some mechanisms for other IntelliSense Providers, for example:

  • a mechanism for regular VBA add-ins
  • xml or other mark-up files that describe the extra function info, so that any add-in (non Excel-DNA) can use the IntelliSense feature.

We'll need to decide how IntelliSense Providers can provide enhanced information beyond the current function and argument descriptions, e.g. enum lists or hyperlinks, but details of that can come later.

IntelliSense Servers

An add-in that is able to perform the IntelliSense display is an "IntelliSense Server". We move from having ExceDna.IntelliSense.xll as an add-in, to ExcelDna.IntelliSense.dll which is the library to be included in any IntelliSense Server.

An Excel process can have only one IntelliSense Server as the "Active IntelliSense Server". This is the add-in that is actively hooked into the UI Automation, popping up the windows etc. We implement it so that the Active IntelliSense Server is always the one with the newest version. So suppose an IntelliSense Server add-in loads and becomes the Active one. Then later an add-in with a newer version IntelliSense server is loaded. This add-in must now tell the Active IntelliSense Server to deactivate, and itself then become the Active Server.

So the rule is that the Active IntelliSense Server is always one of those with the latest version among the IntelliSense Servers loaded in the process.

Further, we ensure there is a deactivation process, so that if an add-in that is the Active IntelliSense Server is unloaded, there is a way (some arbitrary choice) to Activate one of the latest-version IntelliSense Servers among those loaded.

Disable (enable) switch

We need to have a master-switch (a registry entry or something) that completely disables IntelliSense. It must be easy (or at least possible) to use add-ins that are IntelliSense Servers without having the IntelliSense part operating. Otherwise, an add-in that is an IntelliSense Server is useless if the IntelliSense doesn't work well on a particular environment. For now, maybe it should even be opt-in as a safety measure.

Clone this wiki locally