Τρόπος δημιουργίας ενός προσθέτου COM του Office χρησιμοποιώντας το Visual C# .NET

Για την Microsoft Visual Basic .NET έκδοση αυτού του άρθρου, ανατρέξτε στην ενότητα 302896 .

Για την Microsoft Visual Basic 6.0 έκδοση αυτού του άρθρου, ανατρέξτε στην ενότητα 238228 .

Για μια έκδοση του Microsoft Visual C++ 6.0 αυτού του άρθρου, ανατρέξτε στην ενότητα 230689 .

ΣΕ ΑΥΤΉΝ ΤΗΝ ΕΡΓΑΣΊΑ

Σύνοψη

Microsoft Office XP, το Microsoft Office 2003 και το Microsoft Office 2007 υποστηρίζει μια ομοιόμορφη σχεδίαση αρχιτεκτονική για τη δημιουργία εφαρμογών πρόσθετα για να βελτιώσετε και να ελέγχετε τις εφαρμογές του Office. Αυτά τα πρόσθετα ονομάζονται πρόσθετα Component Object Model (COM) της Microsoft. Αυτό το άρθρο βήμα προς βήμα περιγράφει τα πρόσθετα COM του Office και περιγράφει τον τρόπο δημιουργίας ενός προσθέτου COM του Office, χρησιμοποιώντας το Microsoft Visual C# .NET.

Η διασύνδεση IDTExensibility2

Ενός προσθέτου COM είναι εντός διεργασίας διακομιστή COM ή βιβλιοθήκη δυναμικής σύνδεσης ActiveX (DLL) που υλοποιεί τη διασύνδεση IDTExensibility2 , όπως περιγράφεται στη βιβλιοθήκη τύπων Microsoft προσθέτου Designer (Msaddndr.dll). Όλα τα πρόσθετα COM αντλούν από αυτήν τη διασύνδεση και πρέπει να υλοποιήσει κάθε μία από τις πέντε διαφορετικές μεθόδους.

OnConnection

Το συμβάν OnConnection πυρκαϊών όποτε του προσθέτου COM είναι συνδεδεμένος. Του προσθέτου η ενδέχεται να είναι συνδεδεμένοι κατά την εκκίνηση, από τον τελικό χρήστη, είτε μέσω της αυτοματοποίησης. Εάν το συμβάν OnConnection επιστρέφει με επιτυχία, του προσθέτου λέγεται ότι είναι δυνατή η φόρτωση. Εάν επιστραφεί μήνυμα λάθους, στην κύρια εφαρμογή δημοσιεύει αμέσως την αναφορά του προσθέτου και καταστρέφεται το αντικείμενο.

Το συμβάν OnConnection λαμβάνει τις ακόλουθες τέσσερις παραμέτρους:
  • Εφαρμογή: μια αναφορά στο αντικείμενο εφαρμογής του κεντρικού υπολογιστή.
  • ConnectMode: μια σταθερά που καθορίζει πώς συνδέεται το πρόσθετο του. Το πρόσθετο του μπορούν να συνδεθούν με τους ακόλουθους τρόπους:
    • ext_cm_AfterStartup: πρόσθετο ενεργοποιείται από τον τελικό χρήστη από το πλαίσιο διαλόγου " Πρόσθετα COM ".
    • ext_cm_CommandLine: το πρόσθετο του συνδέεται από τη γραμμή εντολών. Σημειώστε ότι αυτό δεν ισχύει για τη δημιουργία προσθέτων COM για εφαρμογές του Office.
    • ext_cm_External: το πρόσθετο του είναι συνδεδεμένος με μια εξωτερική εφαρμογή μέσω της αυτοματοποίησης. Σημειώστε ότι αυτό δεν ισχύει για τη δημιουργία προσθέτων COM για εφαρμογές του Office.
    • ext_cm_Startup: του προσθέτου εκκινείται από τον κεντρικό υπολογιστή κατά την εκκίνηση της εφαρμογής. Αυτή η συμπεριφορά ελέγχεται από μια ρύθμιση του μητρώου.
  • AddInInst: μια αναφορά στο αντικείμενο COMAddIn που αναφέρεται σε αυτό προσθέτου στη συλλογή COMAddIns για την εφαρμογή κεντρικού υπολογιστή.
  • Προσαρμογή: έναν πίνακα Variant τιμών τύπου που μπορεί να δεχτεί δεδομένα χρήστη.

OnDisconnection

Το συμβάν OnDisconnection πυρκαϊών όταν του προσθέτου COM έχει αποσυνδεθεί και αμέσως πριν αυτό καταργεί τη φόρτωση από τη μνήμη. Του προσθέτου θα πρέπει να εκτελέσει εκκαθάριση των πόρων σε αυτό το συμβάν και επαναφορά τυχόν αλλαγές που έγιναν στην εφαρμογή κεντρικού υπολογιστή.

Το συμβάν OnDisconnection λαμβάνει τις ακόλουθες δύο παραμέτρους:
  • RemoveMode: μια σταθερά που καθορίζει πώς αποσυνδέθηκε του προσθέτου. Το πρόσθετο του να μπορεί να αποσυνδέεται με τους εξής τρόπους:
    • ext_dm_HostShutdown: του προσθέτου αποσυνδέεται, όταν κλείνει η εφαρμογή κεντρικού υπολογιστή.
    • ext_dm_UserClosed: έχει αποσυνδεθεί από τον τελικό χρήστη ή από έναν ελεγκτή αυτοματοποίησης του προσθέτου.
  • Προσαρμογή: έναν πίνακα Variant τιμών τύπου που μπορεί να δεχτεί δεδομένα χρήστη.

OnAddInsUpdate

Το συμβάν OnAddInsUpdate πυρκαϊών όταν αλλάζει το σύνολο των καταχωρημένων προσθέτων COM. Με άλλα λόγια, κάθε φορά που ενός προσθέτου COM είναι εγκατεστημένα ή να καταργηθεί από την κύρια εφαρμογή, αυτό το συμβάν πυρκαϊών.

OnStartupComplete και OnBeginShutdown

Τόσο η μέθοδος OnStartupComplete και η μέθοδος OnBeginShutdown καλούνται όταν έχει μείνει στην εφαρμογή κεντρικού υπολογιστή ή να εισέρχεται σε μια κατάσταση στην οποία χρήστη επικοινωνίας θα πρέπει να αποφεύγονται επειδή η εφαρμογή είναι απασχολημένη φόρτωσης ή εκφόρτωσης ίδιο από τη μνήμη. Η μέθοδος OnStartupComplete καλείται μόνο εάν ήταν συνδεδεμένος κατά την εκκίνηση του προσθέτου και η μέθοδος OnBeginShutdown καλείται μόνο εάν ο κεντρικός υπολογιστής αποσυνδεθεί προσθέτου κατά τον τερματισμό λειτουργίας.

Επειδή το περιβάλλον εργασίας χρήστη για την εφαρμογή κεντρικού υπολογιστή είναι πλήρως ενεργό όταν αυτά τα συμβάντα πυρκαϊάς, αυτά μπορεί να είναι ο μόνος τρόπος για να εκτελέσετε ορισμένες ενέργειες που διαφορετικά θα ήταν διαθέσιμες από το συμβάν OnConnection και το συμβάν OnDisconnection .

COM προσθέτου δήλωσης

Εκτός από την κανονική COM καταχώρηση, ενός προσθέτου COM πρέπει να καταχωρηθεί με κάθε εφαρμογή του Office που εκτελείται. Να καταχωρηθεί με μια συγκεκριμένη εφαρμογή, του προσθέτου θα πρέπει να δημιουργήσετε ένα δευτερεύον κλειδί, χρησιμοποιώντας το ProgID ως το όνομα για το κλειδί, κάτω από την ακόλουθη θέση:
HKEY_CURRENT_USER\Software\Microsoft\Office\<OfficeApp>\Addins\<ProgID>
Το πρόσθετο του μπορούν να παρέχουν τιμές σε αυτήν τη θέση κλειδιού για ένα φιλικό εμφανιζόμενο όνομα και μια πλήρη περιγραφή. Επιπλέον, το πρόσθετο στο πρόγραμμα πρέπει να καθορίσετε τη συμπεριφορά επιθυμητό φορτίο, χρησιμοποιώντας μια τιμή DWORD που ονομάζεται LoadBehavior. Αυτή η τιμή καθορίζει τον τρόπο του προσθέτου έχει φορτωθεί από την εφαρμογή υποδοχής και αποτελείται από ένα συνδυασμό από τις ακόλουθες τιμές:
  • 0 = αποσύνδεση - δεν έχει φορτωθεί.
  • 1 = σύνδεση - έχει φορτωθεί.
  • 2 = bootload - φόρτωση κατά την εκκίνηση της εφαρμογής.
  • 8 = demandLoad - φόρτωση μόνο όταν ζητηθεί από το χρήστη.
  • 16 = ConnectFirstTime - φόρτωση μόνο μία φορά (κατά την επόμενη εκκίνηση).
Η τυπική τιμή που καθορίστηκε είναι 0x03 (σύνδεση | Bootload).


Πρόσθετα που υλοποιούν IDTExtensibility2 θα πρέπει επίσης να καθορίσετε μια τιμή DWORD που ονομάζεται CommandLineSafe για να δηλώσει εάν τα πρόσθετα είναι ασφαλή για τις εργασίες που δεν υποστηρίζουν το περιβάλλον εργασίας χρήστη. Η τιμή 0x00 δηλώνει ψευδής και τιμή 0x01 δηλώνει την τιμή True.


Τρόπος δημιουργίας ενός προσθέτου COM με χρήση Visual C# .NET

Όπως αναφέρθηκε παραπάνω, ενός προσθέτου COM του Office είναι ένας διακομιστής COM εντός διεργασίας που ενεργοποιείται από μια εφαρμογή του Office από το επίπεδο του χρόνου εκτέλεσης COM. Ανάπτυξη ενός προσθέτου πρόγραμμα COM στο .NET απαιτεί επομένως, το πρόσθετο στοιχείο να υλοποιηθεί στο .NET και στη συνέχεια εκτίθεται σε τους πελάτες COM (δηλαδή, των εφαρμογών του Office) μέσω του επιπέδου διαλειτουργικότητας COM.

Για να δημιουργήσετε ένα πρόσθετο COM του Visual C# .NET, ακολουθήστε τα εξής βήματα:
  1. Στο Visual C# .NET, δημιουργήστε ένα έργο βιβλιοθήκη κλάσεων.
  2. Προσθέστε μια αναφορά για τη βιβλιοθήκη τύπων που υλοποιεί IDTExtensibility2. Η κύρια συγκρότηση διαλειτουργικότητας για αυτό διατίθεται ήδη κάτω από το όνομα επεκτασιμότητας.
  3. Προσθέστε μια αναφορά στη βιβλιοθήκη αντικειμένων του Microsoft Office. Η κύρια συγκρότηση διαλειτουργικότητας για αυτό διατίθεται ήδη κάτω από το όνομα του Office.
  4. Δημιουργήστε μια δημόσια κλάση στη βιβλιοθήκη κλάσης που υλοποιεί IDTExtensibility2.
  5. Μετά από την κλάση είναι ενσωματωμένη βιβλιοθήκη, η καταχώρηση της βιβλιοθήκης για διαλειτουργικότητα. Για να γίνει αυτό, δημιουργήστε ένα ισχυρό όνομα συγκρότησης για αυτήν τη βιβλιοθήκη κλάσης και στη συνέχεια να το καταχωρήσετε με τη διαλειτουργικότητα. Μπορείτε να χρησιμοποιήσετε το Regasm.exe για να καταχωρήσετε ένα στοιχείο .NET για διαλειτουργικότητα.
  6. Δημιουργία καταχωρήσεων μητρώου, ώστε να αναγνωρίζει και να φορτώσετε το πρόσθετο εφαρμογές του Office.
Μπορείτε να επιλέξετε να ολοκληρώσετε όλα τα βήματα, ή μπορείτε να δημιουργήσετε ένα έργο .NET τύπου Κοινόχρηστο πρόσθετο. Ξεκινά τον Οδηγό επεκτασιμότητας, ο οποίος σας βοηθά να δημιουργήσετε ενός προσθέτου COM στο .NET.

Ο οδηγός επεκτασιμότητας δημιουργεί ένα έργο Visual C# .NET κλάσης βιβλιοθήκη μαζί με μια σύνδεση κλάσης που υλοποιεί τη διασύνδεση IDTExtensibility2 . Ο κωδικός σκελετό που υλοποιεί τα κενά μέλη της
IDTExtensibility επίσης δημιουργηθεί. Αυτό το έργο έχει αναφορές σε συγκροτήσεις επεκτασιμότητας και του Office. Τις ρυθμίσεις δημιουργίας του έργου έχει καταχωρηθεί για διαλειτουργικότητα COM επιλεγμένο. Το αρχείο συναρμολόγησης του κλειδιού (.snk), δημιουργείται και συσχετίζεται με το χαρακτηριστικό AssemblyKeyfile στο Assemblyinfo.vb.

Μαζί με το έργο βιβλιοθήκη κλάσης, ο οδηγός δημιουργεί ένα έργο εγκατάστασης που μπορείτε να χρησιμοποιήσετε για την ανάπτυξη του προσθέτου COM σε άλλους υπολογιστές. Εάν θέλετε, μπορείτε να καταργήσετε αυτό το έργο.

Παράδειγμα βήμα προς βήμα

  1. Στο μενού " αρχείο " στο Microsoft Visual Studio .NET, κάντε κλικ στην επιλογή Δημιουργίακαι, στη συνέχεια, κάντε κλικ στο έργο.
  2. Στο πλαίσιο διαλόγου " Νέο έργο ", αναπτύξτε τα Άλλα έργα στην περιοχή Τύποι έργου, επιλέξτε Έργα επεκτασιμότηταςκαι, στη συνέχεια, επιλέξτε το πρόσθετο πρότυπο κοινόχρηστα.
  3. Πληκτρολογήστε MyCOMAddin ως το όνομα του προσθέτου και, στη συνέχεια, κάντε κλικ στο κουμπί OK.
  4. Όταν εμφανιστεί ο οδηγός επεκτασιμότητας, ακολουθήστε τα εξής βήματα:
    1. Στη σελίδα 1, επιλέξτε Δημιουργία πρόσθετου χρησιμοποιώντας Visual C#και, στη συνέχεια, κάντε κλικ στο κουμπί Επόμενο.
    2. Στη σελίδα 2, επιλέξτε τις ακόλουθες εφαρμογές κεντρικού υπολογιστή και, στη συνέχεια, κάντε κλικ στο κουμπί Επόμενο:
      • Το Microsoft Word
      • Το Microsoft PowerPoint
      • Το Microsoft Outlook
      • Το Microsoft Excel
      • Η Microsoft Access
    3. Στη σελίδα 3, δώστε ένα όνομα και μια περιγραφή για το πρόσθετο και, στη συνέχεια, κάντε κλικ στο κουμπί Επόμενο.

      Σημείωση Το όνομα και την περιγραφή του πρόσθετου εμφανίζεται στο πλαίσιο διαλόγου προσθέτου COM στην εφαρμογή του Office.

    4. Στη σελίδα 4, επιλέξτε όλες τις διαθέσιμες επιλογές και, στη συνέχεια, κάντε κλικ στο κουμπί Επόμενο.
    5. Κάντε κλικ στο κουμπί Τέλος.
  5. Στο μενού ' έργο ', κάντε κλικ στο κουμπί Προσθήκη αναφοράς. Κάντε κλικ στο κουμπί " System.Windows.Forms.DLL " στη λίστα των στοιχείων, κάντε κλικ στην επιλογήκαι, στη συνέχεια, κάντε κλικ στο κουμπί OK.
  6. Προσθέστε τα ακόλουθα στη λίστα των χώρων ονομάτων στην κλάση σύνδεσης :
    using System.Reflection;
  7. Προσθέστε το ακόλουθο μέλος στην κλάση σύνδεσης :
    private CommandBarButton MyButton; 
  8. Εφαρμογή του κώδικα για τα μέλη της IDTExtensibility2 στην κλάση σύνδεση , ως εξής:
    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. Δημιουργία και δοκιμή του προσθέτου COM. Για να το κάνετε αυτό, ακολουθήστε τα εξής βήματα:
    1. Από το μενού Δημιουργία , κάντε κλικ στο κουμπί Δημιουργία λύσης. Σημειώστε ότι δόμηση του προσθέτου COM καταγράφει της κλάσης .NET με τη διαλειτουργικότητα.
    2. Ξεκινήστε ένα από τις εφαρμογές του Office που έχετε επιλέξει ως εφαρμογές κεντρικού υπολογιστή για το πρόσθετό σας (για παράδειγμα, το Microsoft Word ή Microsoft Excel).
    3. Μετά την προσθήκη του έχει ξεκινήσει, ενεργοποιείται το συμβάν OnStartupComplete του προσθέτου και λαμβάνετε ένα μήνυμα. Κλείσετε το πλαίσιο μηνύματος. Σημειώστε ότι το πρόσθετο του Προσθήκη νέου προσαρμοσμένου κουμπιού με τη λεζάντα "My προσαρμοσμένου κουμπιού" στη βασική γραμμή εργαλείων.
    4. Κάντε κλικ στο κουμπί μου. Το συμβάν Click για το κουμπί γίνεται από το πρόσθετο του και θα εμφανιστεί ένα πλαίσιο μηνύματος. Κλείσετε το πλαίσιο μηνύματος.
    5. Κλείστε την εφαρμογή του Office.
    6. Όταν κλείσετε την εφαρμογή, το συμβάν Πυροδοτείται OnBeginShutDown , και λαμβάνετε ένα μήνυμα. Κλείσετε το πλαίσιο μηνύματος, για να τερματίσετε την επίδειξη.

Αναφορές

Για πρόσθετες πληροφορίες σχετικά με τη δημιουργία προσθέτων COM, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:

190253 ΠΛΗΡΟΦΟΡΙΕΣ: σχεδιαστές VB6 δεν λειτουργούν σε VB5

Ιδιότητες

Αναγνωριστικό άρθρου: 302901 - Τελευταία αναθεώρηση: 21 Ιαν 2017 - Αναθεώρηση: 1

Σχόλια