Below is a table that summarizes some of these differences. It comes from an article by Saul Candib which has been published within the MSDN Office Developer Center. See the section List of Additional Resources at the end of this module for a complete reference to this article.
COM add-ins
|
Add-ons in .vsl files
|
Add-ons in.exe files
|
Support added in Visio 2002.
|
Support added in Visio 2.0.
|
Support added in Visio 2.0.
|
Can run in-process.
|
Runs in-process.
|
Runs out-of-process.
|
A COM object that implements the IDTExtensibility2 interface, usually a DLL.
|
A DLL with an entry point of VisioLibMain.
|
A standalone executable program.
|
Can be created in any language that can create a COM object and implement an interface (including Microsoft .NET languages).
|
Can be created in languages that can support exporting functions, typically C++.
|
Can be created in any language that can create .exe Automation clients.
|
Can run in multiple Office applications with proper implementation.
|
Visio-specific.
|
Can run in multiple Office applications with proper implementation.
|
Load behavior is defined in the registry. Some examples are Startup or On Demand.
|
Loaded when called.
|
Loaded when called.
|
Can be installed anywhere. Location information is contained in the registry entry.
|
Can be installed anywhere. However, for path discovery, the add-on file path must be added to the Visio Start-up or Add-ons path. For component-published add-ons, location information is contained in the registry entry.
|
Can be installed anywhere. However, for path-discovery, the add-on file path must be added to the Visio Start-up or Add-ons path. For component-published add-ons, location information is contained in the registry entry.
|
Cannot be called from the ShapeSheet. However, can monitor for and respond to marker events raised by the QueueMarkerEvent add-on or the QueueMarker ShapeSheet function in response to user actions (such as the evaluation of a ShapeSheet cell formula).
|
Can be run in response to a formula recalculation (the RUNADDON and RUNADDONWARGS functions).
|
Can be run in response to a formula recalculation (the RUNADDON and RUNADDONWARGS functions).
|
Cannot be run from the Tools menu.
|
Can be run from the Add-ons submenu (Tools menu). Add-ons can also be designed to not appear on the Tools menu.
|
Can be run from the Add-ons submenu (Tools menu). Add-ons can also be designed to not appear on the Tools menu.
|
Cannot be run in response to UIObject objects. However, can monitor for and respond to marker events raised by the QueueMarkerEvent add-on in response to user actions (such as selection of items implemented by using the UIOBject object).
|
Can be bound to a menu, menu item, toolbar item, or accelerator by using the AddonName property when using the UIObject object model.
|
Can be bound to a menu, menu item, toolbar item, or accelerator by using the AddonName property when using the UIObject object model.
|
Can be bound to a CommandBarButton object by using the OnAction property when using the command bar object model, or can handle its Click event.
|
Can be bound to a CommandBarButton object by using the OnAction property when using the command bar object model, or can handle its Click event.
|
Can be bound to a CommandBarButton object by using the OnAction property when using the command bar object model, or can handle its Click event.
|
Cannot be persisted. However, can monitor for and respond to marker events raised by the QueueMarkerEvent add-on in response to user actions (such as actions that cause a persisted event to be raised).
|
Can be persisted in an object's EventList collection by using the Target property of the Event object.
|
Can be persisted in an object's EventList collection by using the Target property of the Event object.
|