Het Office COM-invoegtoepassing bouwen met behulp van Visual c#.NETTO

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 302901 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Op deze pagina

Samenvatting

Microsoft Office XP, Microsoft Office 2003 en Microsoft Office 2007 ondersteunt een uniform ontwerp architectuur voor het bouwen van toepassingen invoegtoepassingen verbeteren en zo de besturing van de Office-toepassingen. Deze invoegtoepassingen worden Microsoft Component Object Model (COM) genoemd. Add-ins. In dit artikel Office COM-invoegtoepassingen worden beschreven en wordt beschreven hoe u Office COM-invoegtoepassing door werken met Microsoft Visual c#.NET.

De IDTExensibility2-interface

Een COM-invoegtoepassing is een in-process COM-server, of een ActiveX-DLL Library (DLL) implementeert deIDTExensibility2interface zoals beschreven in het type Microsoft Add-in Designer bibliotheek (Msaddndr.dll). Alle COM-invoegtoepassingen vanuit deze interface overneemt en moet Implementeer elk van de vijf methoden.

OnConnection

HetOnConnectiongebeurtenis wordt geactiveerd wanneer de COM-invoegtoepassing verbonden. De invoegtoepassing kan worden aangesloten bij het opstarten door de eind gebruiker of via Automatisering. Als deOnConnectiongebeurtenis retourneert is, dat de invoegtoepassing wordt gezegd dat geladen. Als een foutbericht wordt geretourneerd, onmiddellijk de hosttoepassing versies van de verwijzing naar de invoegtoepassing en het object wordt vernietigd.

HetOnConnectiongebeurtenis heeft de volgende vier parameters:
  • Toepassing: Een verwijzing naar de host application-object.
  • ConnectMode: Een constante die aangeeft hoe dat de invoegtoepassing is verbonden. Het invoegtoepassing kan worden aangesloten op de volgende manieren:
    • ext_cm_AfterStartup: De invoegtoepassing wordt gestart door de eind gebruiker van deCOM-invoegtoepassingenhet dialoog venster.
    • ext_cm_CommandLine: De invoegtoepassing is aangesloten via de opdracht regel. Opmerking dat dit geldt niet voor het bouwen van COM-invoegtoepassingen voor Office-toepassingen.
    • ext_cm_External: De invoegtoepassing is verbonden met een externe toepassing via Automatisering. Houd er rekening mee dat dit niet van toepassing op het bouwen van COM-invoegtoepassingen voor Office toepassingen.
    • ext_cm_Startup: De invoegtoepassing wordt gestart door de host toepassing start. Dit gedrag wordt bepaald door een instelling in het register.
  • AddInInst: Een verwijzing naar deCOMAddInobject dat verwijst naar deze invoegtoepassing in deCOMAddInscollectie voor de hosttoepassing.
  • Aangepaste: Een array vanVariantTyp waarden voor de gebruiker gedefinieerde gegevens kunnen bevatten.

OnDisconnection

HetOnDisconnectiongebeurtenis wordt geactiveerd wanneer de COM-invoegtoepassing verbinding verbroken en vlak voor het uit het geheugen verwijderd. De invoegtoepassing moet worden uitgevoerd opruiming van bronnen in deze gebeurtenis en herstel wijzigingen van de Host-toepassing.

HetOnDisconnectiongebeurtenis heeft de volgende twee parameters:
  • RemoveMode: Een constante die aangeeft hoe dat de invoegtoepassing is verbroken. Het invoegtoepassing kan worden verbroken op de volgende manieren:
    • ext_dm_HostShutdown: De invoegtoepassing wordt verbroken wanneer de hosttoepassing gesloten.
    • ext_dm_UserClosed: De invoegtoepassing wordt verbroken door de eind gebruiker of een automatisering controller.
  • Aangepaste: Een array vanVariantTyp waarden voor de gebruiker gedefinieerde gegevens kunnen bevatten.

OnAddInsUpdate

HetOnAddInsUpdategebeurtenis wordt geactiveerd wanneer de verzameling COM geregistreerd invoegtoepassingen wijzigingen. Met andere woorden, wanneer een COM is-invoegtoepassing geïnstalleerd of verwijderd Deze gebeurtenis treedt van de hosttoepassing.

OnStartupComplete en OnBeginShutdown

Zowel deOnStartupCompletemethode en deOnBeginShutdownde methode wordt aangeroepen. Wanneer de hosttoepassing heeft verlaten of een staat in waarmee de gebruiker is ingevoerd interactie moet worden vermeden, omdat de toepassing bezet is geladen of zelf verwijderd uit het geheugen. HetOnStartupCompletemethode wordt aangeroepen als de invoegtoepassing tijdens het opstarten is aangesloten en deOnBeginShutdownmethode wordt aangeroepen als de host de invoegtoepassing verbroken tijdens het afsluiten.

Omdat de gebruikersinterface voor de hosttoepassing volledig actief is wanneer deze gebeurtenissen gestart, zijn de enige manier om bepaalde acties die anders niet beschikbaar zijn zou uit deOnConnectiongebeurtenis en deOnDisconnectionde gebeurtenis.

COM-invoegtoepassing registreren

Naast het normale registratie COM moet een COM-invoegtoepassing registreren zichzelf bij elke Office-toepassing wordt uitgevoerd. Registreren zelf met een bepaalde toepassing, de invoegtoepassing maakt een subsleutel met de ProgID als naam voor de sleutel op de volgende locatie:
HKEY_CURRENT_USER\Software\Microsoft\Office\ <officeapp>\Addins\ <progid></progid></officeapp>
De invoegtoepassing kan bieden op deze locatie sleutel waarden voor een aangepaste weergavenaam en een volledige beschrijving. Ook de invoegtoepassing moet de gewenste laad gedrag opgeven met behulp van een DWORD-waarde met de naam LoadBehavior. Deze waarde bepaalt hoe de invoegtoepassing wordt geladen door de host toepassing, en bestaat uit een combinatie van de volgende waarden:
  • 0 = Verbreken - Is niet geladen.
  • 1 = Connected - Is geladen.
  • 2 = Bootload - laden tijdens het opstarten van de toepassing.
  • 8 = DemandLoad - belasting uitsluitend wanneer aangevraagd door gebruiker.
  • 16 = ConnectFirstTime - belasting slechts eenmaal (op volgende opstarten).
De standaard waarde is 0x03 (verbonden | Bootload).

Invoegtoepassingen die worden geïmplementeerdIDTExtensibility2ook moet een DWORD-waarde met de naam opgeven
CommandLineSafe
naar aangeven of de invoegtoepassingen zijn veilig voor bewerkingen die geen ondersteuning voor een gebruiker bieden interface. 0X00 de waarde False geeft en 0x01 de waarde True geeft aan.

Hoe u een COM-invoegtoepassing bouwen met behulp van Visual c#.NETTO

Zoals eerder gezegd, is een Office COM-invoegtoepassing een in-process COM server die wordt geactiveerd door een Office-toepassing via de COM-runtime laag. Daarom ontwikkelen van een COM-invoegtoepassing in.NET vereist dat de invoegtoepassing in worden onderdeel geïmplementeerd.NET en vervolgens blootgesteld aan COM-clients (dat wil zeggen de Office-toepassingen) via de COM-interop laag.

Maken van een COM-invoegtoepassing in Visual c#.NETTO, als volgt:
  1. In Visual c#.NETTO, klassebibliotheek maken project.
  2. Voeg een verwijzing naar de typebibliotheek die worden geïmplementeerdIDTExtensibility2. De primaire interop-assemblage voor deze nog beschikbaar onder de naamUitbreidbaarheid.
  3. Voeg een verwijzing naar de objectbibliotheek van Microsoft Office. Het primaire interop-assembly's dit is al beschikbaar onder de naamOffice.
  4. Maak een openbare klasse in de klassebibliotheek die worden geïmplementeerdIDTExtensibility2.
  5. Nadat de klassebibliotheek is gebouwd, de bibliotheek voor registreren COM interop. U doet dit door genereren een sterke benoemde assembly voor deze klasse bibliotheek en vervolgens te registreren met COM interop. U kunt een bestand met regasm. Registreer een.Net werk onderdelen voor COM interop.
  6. Registervermeldingen maken zodat Office-toepassingen kunt herkent en de invoegtoepassing laadt.
U kunt al deze stappen te voltooien, of u kunt Maak een.NETTO project typeGedeelde invoegtoepassing. Hiermee start u de Wizard uitbreidbaarheid, waarmee u te maken een COM-invoegtoepassing in.NET.

De Wizard uitbreidbaarheid maakt een Visual c# .NETTO klassen bibliotheek project samen met eenVerbinding makenklasse waarmee deIDTExtensibility2interface. De skelet code de lege leden van implementeertIDTExtensibilityook wordt gegenereerd. Dit project heeft verwijzingen naar uitbreidbaarheid en Office-assemblages. De instellingen van de build van het project hebbenRegistreren voor COM Interopgeselecteerd. Het assembly-bestand voor sleutel (.snk) wordt gegenereerd en wordt waarnaar wordt verwezen in deAssemblyKeyfileken merk in Assemblyinfo.vb.

Samen met de klasse bibliotheek project genereert een setup-project kunt u de wizard de COM-invoegtoepassing op andere computers implementeren. U kunt dit project verwijderen als gewenst.

Stapsgewijs voorbeeld

  1. Op deBestandin het menu van Microsoft Visual Studio.Net werk, klikt u opNieuwe, en klik vervolgens opProject.
  2. In deNieuw Projectdialoog venster VouwAndere projectenonderProject typen, selecteerUitbreidings projecten, en selecteer vervolgens deGedeelde invoegtoepassingsjabloon.
  3. TypeMyCOMAddinAls de naam van de invoegtoepassing en klik vervolgens opOK.
  4. Wanneer de Wizard Client Setup uitbreiden wordt weer gegeven, gaat u als volgt te werk:
    1. Selecteer op pagina 1Maak een invoegtoepassing met behulp van Visual c#, en klik vervolgens opVolgende.
    2. Selecteer op pagina 2 het volgende hosttoepassingen, en Klik vervolgens opVolgende:
      • Microsoft Word
      • Microsoft PowerPoint
      • Microsoft Outlook
      • Microsoft Excel
      • Microsoft Access
    3. Op pagina 3, Geef een naam en beschrijving voor de invoegtoepassing en klik vervolgens opVolgende.

      OpmerkingDe naam en de beschrijving van de invoegtoepassing weer gegeven in deCOM-invoegtoepassingdialoog venster van de Office-toepassing.

    4. Op pagina 4 selecteert u alle beschikbare opties, en Klik opVolgende.
    5. Klik opVoltooien.
  5. Op deProjectmenu, klikt u opVerwijzing toevoegen. Klik opSystem.Windows.Forms.dllKlik in de lijst onderdelenSelecteer, en klik vervolgens opOK.
  6. Voeg het volgende toe aan de lijst met naam ruimten in deVerbinding makenklasse:
    using System.Reflection;
  7. Het volgende lid toevoegen aan deVerbinding makenklasse:
    private CommandBarButton MyButton; 
  8. De code implementeren voor de leden vanIDTExtensibility2in deVerbinding makenklasse als volgt:
    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. Bouwen en testen van de COM-invoegtoepassing. Hiertoe voert u de volgende stappen:
    1. Op deBuildmenu, klikt u opOplossing bouwen. Houd er rekening mee dat het bouwen van de COM-invoegtoepassing registers de.Met net werk klasse de COM-interop.
    2. Start een Office-toepassing die u hebt geselecteerd als host voor toepassingen voor uw invoegtoepassing (bijvoorbeeld Microsoft Word of Microsoft Excel).
    3. Nadat de invoegtoepassing heeft gestart, deOnStartupCompletegebeurtenis van de invoegtoepassing wordt gestart en wordt een bericht weer gegeven. Dit bericht sluiten vak. Houd er rekening mee dat de invoegtoepassing toegevoegd een nieuwe knop met de bijschrift "Mijn aangepaste knop" aan de werkbalk Standaard.
    4. Klik opMijn aangepaste knop. HetKlik opgebeurtenis voor de knop door de invoegtoepassing is verwerkt en u ontvangt een berichtvenster. Het bericht negeren.
    5. De Office-toepassing afsluiten.
    6. Wanneer u de toepassing sluit deOnBeginShutDowngebeurtenis geactiveerd en wordt een bericht weer gegeven. Negeren van het bericht te beëindigen de demonstratie.

Referenties

Voor meer informatie over het schrijven van COM-invoegtoepassingen, klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:
190253INFO: VB6 ontwerpers werken niet in VB5

Eigenschappen

Artikel ID: 302901 - Laatste beoordeling: maandag 28 februari 2011 - Wijziging: 2.0
De informatie in dit artikel is van toepassing op:
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Office Excel 2007
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Office Outlook 2007
  • Microsoft Office Outlook 2003
  • Microsoft Outlook 2002 Standard Edition
  • Microsoft Office PowerPoint 2007
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft Office Word 2007
  • Microsoft Word 2002 Standard Edition
Trefwoorden: 
kbautomation kbhowtomaster kbmt KB302901 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende:302901

Geef ons feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com