![]() |
![]() |
|
| Unistep ® - Microsoft Visio diagram animation |
||
Unistep technologyInformation on how I developed Unistep Unistep is an add-in for Microsoft Visio. During the development of this piece of software I had to solve various little problems. For some I found great help on the Net. I thought some solutions may be of interest for other people interested in developing such software. Unistep was developed using Visual Studio 2010. So... you want to develop ad add-in for Visio... The development may be performed in two phases:
Some useful links : Isolating Microsoft Office Extensions with the COM Shim Wizard Using a Separate Application Domain to Avoid Crashing COM Shim Wizards for VS 2010 (Misha Shneerson) .Great article. Also here you can download the Visual studio template to generate the C++ shim for your project. User Interface Extensibility in Visio 2010 Also: Create symbolic links. This is is useful to share among multiple projects in Visual Studio whole folders with source files. No need to li nk individually each file. Get the strong name public key (sn.exe, with Visual Studio). This helps to avoid public references between signed projects.
Create the add-in The first step is to create a new project, of type "Shared add-in" (Template: Other project type, Shared addin). A wizard is activated. Select Microsoft Visio. The result will be an "add-in" template, with a "connect.cs" file which contains the GUID of the new add-in and the first class "connect" with the functions that will be called when the add-in is loaded ("onConnection"...). The class "Connect" will inherit at generation time the interface Extensibility.IDTExtensibility2. IRibbonExtensibility interface is added to be able to manage the Office ribbon. The ribbon will require the Microsoft.Office.Core library.
At this time you may test that the "onConnection" function is reached when you load the add-in. To load it, I used the method indicated by Misha Schneerson, adding Visio as start project. In the assembly properties you may enter the GUID, so it will not change when the project is rebuild.
Next step would be to add in the "onConnection" procedure the event.handlers that you will manage.
Depending on your requirements, various events may be taken into account (you see them in Intellisense). Ribbon management For the Ribbon I created an XML file containing the groups / buttons description. This file is added as a file resource pour le project. Here is an example how the buttons "step back" and "step forward" are described in the ribbon.
You may select the images associated with the controls in Microsoft Office Icons (ImageMSO) Gallery & Extraction. "cback..;" are calback routines in the "connect" class that perform required actions.
These callbacks are entered with the name of the control, so we can choose the action depending on the button. The Connect class contains also the IRibbonExtensibility members, for example:
Here this procedure gets the Unistep Ribbon (a file declared as resource). With this framework in place, you are set to develop the required functions. You can test your add-in with the Visual Studio debugger. Shim development When you start the Office application, in the add-in list you will see your add-in loaded (well, when it does not crash any more). It will be shown as loaded by "mscorlib.dll". When it runs OK, it's time to add the shim, to isolate it in production. You find the "ComshimWizzardSetup.msi" on Misha Schneerson blog. It installs in VS 2010 as a C++ ComShim:
When you launch this wizzard, you have to target the original add-in dll (that you generated in the phase 1). The wizzard will generate two projects, ManagedAggregator and "xxxShim" (well, this is the name you choose). In the final solution you will have to include the two projects generated by this shim : "ManagedAggregator" and the new "xxxShim" as generated. When you launch the office application, you can check that your add-in is loaded as "xxxshim.dll" and not as mscorlib.dll.
If this is not the case, you may find that the add-in was deactivated by office, or not properly loaded. Visual Studio unregisters the old instance and registers the new one, so a rebuild usually solves this situation. Installer I used the standard no frills installer supplied with VS 2010, Debug load problems When you try to deploy the add-in with the installer on a naked machine, it may not run... Usually this is due to some missing dll's in the installer. A very effective debug solution on the target machine is to use the FusLogViewer (fuslogvw.exe) that shows the dll loaded (and most important the missing ones) in your Office session. Code signature To insure customers, I digitally signed the Unistep deployment modules. I used a certificate bought through Ksoftware from Commodo. The nice extra from Ksoftware is tool called "ksign" that eases the signature process. It has a command mode that may be activated through the "PostBuildEvent" of the setup process, so the signature is automatic. Other goodies To manage in Vs2010 files from other projects, I used a very effective solution: symbolic folder redirection. This enables create new projects in Visual studio that point to folders with files from other projects. This avoids to copy or set links individually for multiple files in Visual Studio. For the C++ shim is is useful to sign the project with a strong key (local one). To limit the publics in projects, the solution I found was to define visible identifiers as internal. In the projects you may indicate that this internals be visible to other assemblies: in the "assemblyInfo.cs" file you add "internalsVisibleTo" line:
If you signed the project, you must indicate the public key to activate this visibility. To get the public key (this is not the password that protects your .pfx key!), you may use the sn.exe utility (see link at the top). So, I wish you success in developing Office add-ins!
|
|
Unistep tutorials (animations) Add information for stream steps Demonstrations Free trial Buy General info Unistep technologyBooks (US) Books (UK) Sysoft Contact About Privacy |
|||||
| Copyright (c) Ion Alexandre CARTIANT - Sysoft - 2004-2020 | |||||