Jak vytvořit doplněk aplikace modelu COM sady Office pomocí aplikace Visual C# .NET

Microsoft Visual Basic .NET verzi tohoto článku naleznete v 302896 .

Pro Microsoft Visual Basic 6.0 verzi tohoto článku naleznete v tématu 238228 .

Microsoft Visual C++ 6.0 verzi tohoto článku naleznete v tématu 230689 .

V TOMTO ÚKOLU

Souhrn

Microsoft Office XP, Microsoft Office 2003 a Microsoft Office 2007 podporují architekturu jednotný návrh pro vytváření aplikací doplňky vylepšit a řízení aplikací Office. Tyto doplňky jsou označovány jako doplňky Microsoft modelu COM (Component Object). Tento podrobný článek popisuje doplňky modelu COM sady Office a popisuje, jak vytvořit doplněk aplikace modelu COM sady Office pomocí aplikace Microsoft Visual C# .NET.

Rozhraní IDTExensibility2

Doplněk COM je v procesu serveru COM, nebo ActiveX knihovny (DLL), která implementuje rozhraní IDTExensibility2 popsaným v knihovně typů doplňku Microsoft Designer (Msaddndr.dll). Všechny doplňky modelu COM dědí z tohoto rozhraní a musí implementovat každé z jeho pěti metod.

OnConnection

OnConnection událost vyvolá vždy, když doplněk modelu COM je připojen. Doplněk může být připojen při spuštění koncovým uživatelem nebo prostřednictvím automatizace. Pokud událost OnConnection vrátí úspěšně, doplněk se říká být načten. Pokud je vrácena chybová zpráva, hostitelské aplikace okamžitě uvolnil své odkazy na doplněk a zničení objektu.

Událost OnConnection trvá následující čtyři parametry:
  • Aplikace: odkaz na objekt aplikace hostitele.
  • ConnectMode: Konstanta, která určuje, jak doplněk je připojen. Doplněk lze připojit následujícími způsoby:
    • ext_cm_AfterStartup: doplněk je spuštěn koncovým uživatelem v dialogovém okně Doplňky modelu COM .
    • ext_cm_CommandLine: doplněk je připojen z příkazového řádku. Všimněte si, že to neplatí pro vytváření doplňků modelu COM pro aplikace sady Office.
    • ext_cm_External: doplněk je připojen externí aplikací prostřednictvím automatizace. Všimněte si, že to neplatí pro vytváření doplňků modelu COM pro aplikace sady Office.
    • ext_cm_Startup: doplněk je spuštěn hostitel při spuštění aplikace. Toto chování je řízeno nastavením registru.
  • AddInInst: odkaz na COMAddIn objekt, který odkazuje na tento doplněk v kolekci COMAddIns hostitelské aplikace.
  • Vlastní: matici varianty zadejte hodnoty, které uchovávají uživatelská data.

OnDisconnection

OnDisconnection událost se vyvolá při odpojení doplněk modelu COM a těsně před jeho uvolnění z paměti. Doplněk má provádět jakékoli vyčištění prostředky v této události a obnovit všechny změny provedené do hostitelské aplikace.

OnDisconnection událost má následující dva parametry:
  • RemoveMode: Konstanta, která určuje, jak doplněk byl odpojen. Doplněk může být odpojen následujícími způsoby:
    • ext_dm_HostShutdown: doplněk je odpojen při zavření hostitelské aplikace.
    • ext_dm_UserClosed: doplněk odpojení koncového uživatele nebo automatizaci řadič.
  • Vlastní: matici varianty zadejte hodnoty, které uchovávají uživatelská data.

OnAddInsUpdate

OnAddInsUpdate událost se vyvolá při změně sady registrovaných doplňků modelu COM. Jinými slovy vždy, když doplněk modelu COM je instalaci či odebrání v hostitelské aplikaci vyvolá tuto událost.

OnStartupComplete a OnBeginShutdown

Obou metod OnStartupComplete a OnBeginShutdown nazývá opustil nebo přechází do stavu, ve které uživatelské interakce je nutno vzhledem k tomu, že aplikace je zaneprázdněna, nakládky nebo vykládky sám z paměti hostitele aplikací. OnStartupComplete metoda je volána pouze v případě, že doplněk byl připojen během spuštění a OnBeginShutdown metoda je volána pouze v případě, že hostitel odpojí doplněk během vypnutí.

Vzhledem k tomu, že je uživatelské rozhraní aplikace hostitele při požáru tyto události plně aktivní, mohou být jediným způsobem, jak provést určité akce, které by byly jinak nedostupné z OnConnection událost a událost OnDisconnection .

Registrace doplněk COM

Kromě normální registrace COM doplněk modelu COM je třeba registrovat sebe sama s každou aplikaci sady Office, ve které běží. Samotný zaregistrovat s konkrétní aplikace, doplněk by měly vytvořit podklíč pomocí jeho identifikátor ProgID jako název klíče pod následujícím umístění:
HKEY_CURRENT_USER\Software\Microsoft\Office\<OfficeApp>\Addins\<ProgID>
Doplněk můžete zadat hodnoty v tomto umístění klíče pro zobrazení popisný název a úplný popis. Kromě toho doplněk by měly určit jeho chování požadované zatížení pomocí hodnotu DWORD s názvem LoadBehavior. Tato hodnota určuje, jak doplněk načten hostitelskou aplikací a je tvořena kombinací následujících hodnot:
  • 0 = odpojit - není načten.
  • 1 = připojeno - je načten.
  • 2 = bootload - zatížení při spuštění aplikace.
  • 8 = demandLoad - načíst pouze v případě požadavku uživatele.
  • 16 = ConnectFirstTime - načíst pouze jednou (na další spuštění).
Typické zadána hodnota 0x03 (připojeno | Bootload).


Moduly implementující IDTExtensibility2 by měl také určit hodnotu DWORD s názvem CommandLineSafe k označení, zda jsou doplňky bezpečné pro operace, které nepodporují uživatelské rozhraní. Hodnota 0x00 označuje hodnotu False a hodnotu 0x01 označuje hodnotu True.


Jak vytvořit doplněk modelu COM pomocí Visual C# .NET

Jak již bylo zmíněno dříve, je doplněk aplikace Office COM serveru COM v procesu, který je aktivován aplikace sady Office prostřednictvím vrstvě COM knihovny run-time. Proto vývoj doplněk modelu COM v rozhraní .NET vyžaduje, aby součásti doplňku být implementovány v .NET a poté vystaven klientům modelu COM (to znamená, že aplikace sady Office) prostřednictvím vrstvě COM interop.

Chcete-li vytvořit doplněk modelu COM v aplikaci Visual C# .NET, postupujte takto:
  1. V aplikaci Visual C# .NET vytvořte projekt knihovny tříd.
  2. Přidejte odkaz na knihovnu typů, která implementuje IDTExtensibility2. Primární sestavení interop pro tento je již k dispozici pod názvem Rozšiřitelnost.
  3. Přidáte odkaz na Knihovna objektů Microsoft Office. Primární sestavení interop pro tento je již k dispozici pod názvem Office.
  4. Vytvoření veřejné třídy v knihovně třídy, která implementuje IDTExtensibility2.
  5. Po třídě je sestavena knihovna, registrovat pro volání interop modelu COM knihovny. Generovat silný název sestavení pro tuto knihovnu třídy a zaregistrujte jej pomocí modelu COM interop. Regasm.exe můžete použít k evidenci komponenta .NET pro COM interop.
  6. Vytvoření položky registru tak, aby aplikace sady Office může rozpoznat a načíst doplněk.
Můžete provést všechny tyto kroky nebo můžete vytvořit projekt .NET typu Sdílené doplněk. Spustí se Průvodce rozšiřitelnost, který vám pomůže vytvořit doplněk modelu COM v rozhraní .NET.

Rozšiřitelnost Průvodce vytvoří projekt knihovny třídy Visual C# .NET spolu s Připojit třídy, která implementuje rozhraní IDTExtensibility2 . Kostru kódu, který implementuje prázdné členy
Je IDTExtensibility také generovány. Tento projekt obsahuje odkazy na sestavení rozšiřitelnost a sady Office. Nastavení sestavení projektu mají Register for COM Interop vybrána. Soubor klíče (.snk) sestavení je generován a je odkazován v AssemblyKeyfile atribut v Assemblyinfo.vb.

Spolu s projektu knihovny tříd vygeneruje průvodce projektu instalace, který můžete použít k nasazení doplňku modelu COM v jiných počítačích. Tento projekt můžete podle potřeby odebrat.

Podrobný příklad

  1. V nabídce soubor v aplikaci Microsoft Visual Studio .NET klepněte na příkaz Novýa klepněte na příkaz projekt.
  2. V dialogovém okně Nový projekt rozbalte Jiné projekty v části Typy projektu, vyberte Rozšiřitelnost projektůa pak vyberte šablonu doplněk Sdílené .
  3. Zadejte MyCOMAddin jako název doplněk a potom klepněte na tlačítko OK.
  4. Jakmile se zobrazí Průvodce rozšiřitelnost, postupujte takto:
    1. Na stránce 1 vyberte pomocí vytvořit doplněk Visual C#a potom klepněte na tlačítko Další.
    2. Na stránce 2 vyberte následující hostitelské aplikace a potom klepněte na tlačítko Další:
      • Aplikace Microsoft Word
      • Aplikace Microsoft PowerPoint
      • Aplikace Microsoft Outlook
      • Aplikace Microsoft Excel
      • Aplikace Microsoft Access
    3. Na stránce 3 zadejte název a popis pro doplněk a potom klepněte na tlačítko Další.

      Poznámka: Název a popis doplněk se zobrazí v dialogovém okně doplňku modelu COM v aplikaci sady Office.

    4. Na stránce 4 vyberte všechny dostupné možnosti a potom klepněte na tlačítko Další.
    5. Klepněte na tlačítko Dokončit.
  5. V nabídce projekt klepněte na tlačítko Přidat odkaz. V seznamu součásti klepněte na tlačítko System.Windows.Forms.DLL , klepněte na tlačítko Vybrata klepněte na tlačítko OK.
  6. Přidejte do seznamu oborů názvů ve třídě Připojit následující:
    using System.Reflection;
  7. Přidejte následující člen třídy Připojit :
    private CommandBarButton MyButton; 
  8. Implementujte kód pro členy IDTExtensibility2 ve třídě Připojit následujícím způsobem:
    public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom) {   applicationObject = application;
    addInInstance = addInInst;

    if(connectMode != Extensibility.ext_ConnectMode.ext_cm_Startup)
    {
    OnStartupComplete(ref custom);
    }

    }

    public void OnDisconnection(Extensibility.ext_DisconnectMode disconnectMode, ref System.Array custom) {
    if(disconnectMode != Extensibility.ext_DisconnectMode.ext_dm_HostShutdown)
    {
    OnBeginShutdown(ref custom);
    }
    applicationObject = null;
    }


    public void OnAddInsUpdate(ref System.Array custom)
    {
    }

    public void OnStartupComplete(ref System.Array custom)
    {
    CommandBars oCommandBars;
    CommandBar oStandardBar;

    try
    {
    oCommandBars = (CommandBars)applicationObject.GetType().InvokeMember("CommandBars", BindingFlags.GetProperty , null, applicationObject ,null);
    }
    catch(Exception)
    {
    // Outlook has the CommandBars collection on the Explorer object.
    object oActiveExplorer;
    oActiveExplorer= applicationObject.GetType().InvokeMember("ActiveExplorer",BindingFlags.GetProperty,null,applicationObject,null);
    oCommandBars= (CommandBars)oActiveExplorer.GetType().InvokeMember("CommandBars",BindingFlags.GetProperty,null,oActiveExplorer,null);
    }

    // Set up a custom button on the "Standard" commandbar.
    try
    {
    oStandardBar = oCommandBars["Standard"];
    }
    catch(Exception)
    {
    // Access names its main toolbar Database.
    oStandardBar = oCommandBars["Database"];
    }

    // In case the button was not deleted, use the exiting one.
    try
    {
    MyButton = (CommandBarButton)oStandardBar.Controls["My Custom Button"];
    }
    catch(Exception)
    {
    object omissing = System.Reflection.Missing.Value ;
    MyButton = (CommandBarButton) oStandardBar.Controls.Add(1, omissing , omissing , omissing , omissing);
    MyButton.Caption = "My Custom Button";
    MyButton.Style = MsoButtonStyle.msoButtonCaption;
    }

    // The following items are optional, but recommended.
    //The Tag property lets you quickly find the control
    //and helps MSO keep track of it when more than
    //one application window is visible. The property is required
    //by some Office applications and should be provided.
    MyButton.Tag = "My Custom Button";

    // The OnAction property is optional but recommended.
    //It should be set to the ProgID of the add-in, so that if
    //the add-in is not loaded when a user presses the button,
    //MSO loads the add-in automatically and then raises
    //the Click event for the add-in to handle.
    MyButton.OnAction = "!<MyCOMAddin.Connect>";

    MyButton.Visible = true;
    MyButton.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(this.MyButton_Click);


    object oName = applicationObject.GetType().InvokeMember("Name",BindingFlags.GetProperty,null,applicationObject,null);

    // Display a simple message to show which application you started in.
    System.Windows.Forms.MessageBox.Show("This Addin is loaded by " + oName.ToString() , "MyCOMAddin");
    oStandardBar = null;
    oCommandBars = null;
    }

    public void OnBeginShutdown(ref System.Array custom)
    {
    object omissing = System.Reflection.Missing.Value ;
    System.Windows.Forms.MessageBox.Show("MyCOMAddin Add-in is unloading.");
    MyButton.Delete(omissing);
    MyButton = null;
    }

    private void MyButton_Click(CommandBarButton cmdBarbutton,ref bool cancel) {
    System.Windows.Forms.MessageBox.Show("MyButton was Clicked","MyCOMAddin"); }

  9. Sestavit a otestovat doplněk modelu COM. Chcete-li to provést, postupujte takto:
    1. V nabídce sestavení klepněte na tlačítko Sestavit řešení. Poznámka: Vytvoření doplňku COM registruje třídu .NET s COM interop.
    2. Spusťte některou z aplikací sady Office, které jste vybrali jako hostitele aplikací pro váš doplněk (například Microsoft Word nebo Microsoft Excel).
    3. Po doplněk byl zahájen, je aktivována událost OnStartupComplete doplněk a zobrazí se zpráva. Zavřete okna se zprávou. Všimněte si, že doplněk přidány nové vlastní tlačítko s titulkem "Moje vlastní tlačítko" na panelu nástrojů Standardní.
    4. Klepněte na tlačítko Moje vlastní. Událost Click pro tlačítko zpracován doplněk a zobrazí okno se zprávou. Zavřete okna se zprávou.
    5. Ukončete aplikaci systému Office.
    6. Po ukončení aplikace aktivována události OnBeginShutDown , a zobrazí se zpráva. Zavřete okna se zprávou k prokázání ukončení.

Odkazy

Další informace o psaní doplňky COM klepněte na následující číslo článku databáze Microsoft Knowledge Base:

190253 INFO: VB6 návrháři nefungují v VB5

Vlastnosti

ID článku: 302901 - Poslední kontrola: 19. 1. 2017 - Revize: 1

Váš názor