Sposób tworzenia pakietu Office 2000 dodatku COM w programie Visual Basic

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 238228 - Zobacz jakich produktów dotyczą zawarte w tym artykule porady.
Rozwiń wszystko | Zwiń wszystko

Na tej stronie

Streszczenie

Microsoft Office 2000 i nowszy, obsługują nowy, jednolite architekturę do budowania aplikacji z dodatkami do wzmocnienia i sterowania aplikacji pakietu Office. Te dodatki nazywane są dodatki COM. W tym artykule będzie przedstawienie sposobu tworzenia dodatku COM przy użyciu języka Visual Basic.

Więcej informacji

Dodatek COM jest inprocess serwera COM (ActiveX DLL), która implementuje interfejs IDTExensibility2, jak opisano w dodatku Projektant typ biblioteki Microsoft (Msaddndr.dll). Wszystkie dodatki COM dziedziczą z tego interfejsu i musi implementować każde pięć metod.

OnConnection

Zdarzenie OnConnection fires w każdym przypadku, gdy dodatek COM jest podłączony. Dodatek może być połączony uruchamianie przez użytkownika końcowego lub za pomocą automatyzacji. Jeśli OnConnection zwraca się pomyślnie, dodatek jest określane jako załadowane. Jeśli zwracany jest błąd aplikacji hosta natychmiast zwalnia odwołanie, tak aby dodatek i niszczony jest obiekt.

OnConnection przyjmuje następujące cztery parametry:
  • Aplikacja - odwołanie do obiektu aplikacji hosta.
  • ConnectMode - Stała określająca sposób połączenia dodatku.
    • ext_cm_AfterStartup - uruchomiony przez użytkownika końcowego z okna dialogowego Dodatki COM
    • ext_cm_CommandLine - połączony z wiersza polecenia. (Nie dotyczy tworzenia dodatków COM dla aplikacji pakietu Office.)
    • ext_cm_External - połączonymi zewnętrznej aplikacji za pomocą automatyzacji. (Nie dotyczy tworzenia dodatków COM dla aplikacji pakietu Office.)
    • ext_cm_Startup - uruchomione przez hosta przy uruchamianiu aplikacji. (To zachowanie jest sterowane przez ustawienie w rejestrze).
  • AddInInst - odwołanie do obiektu COMAddIn, który odnosi się do tego dodatku w kolekcji COMAddIns do aplikacji hosta.
  • Niestandardowy - tablicy wariantów, które mogą zawierać dane zdefiniowane przez użytkownika.

OnDisconnection

Zdarzenie OnDisconnection fires, gdy dodatek COM jest odłączony, a tuż przed zwalnia z pamięci. Dodatek należy wykonać oczyszczania zasobów w takim przypadku i przywrócić wszystkie zmiany wprowadzone do aplikacji hosta.

OnDisconnection przyjmuje następujące dwa parametry:
  • RemoveMode - stała, która określa, w jaki sposób dodatek został odłączony.
    • ext_dm_HostShutdown - odłączony podczas zamykania aplikacji hosta.
    • ext_dm_UserClosed - rozłączony przez użytkownika końcowego lub kontroler automatyzacji.
  • Niestandardowy - tablicy wariantów, które mogą zawierać dane zdefiniowane przez użytkownika.

OnAddInsUpdate

Zdarzenie OnAddInsUpdate fires, gdy zmienia się zestaw zarejestrowanych dodatków COM. Innymi słowy ilekroć dodatku COM jest zainstalowany lub usunięty z aplikacji hosta, to zdarzenie fires.

OnStartupComplete i OnBeginShutdown

Metody OnStartupComplete i OnBeginShutdown są wywoływane, gdy aplikacja hosta opuścił lub wprowadzanie Państwa, których należy unikać interakcji użytkownika, ponieważ aplikacja jest zajęta, załadunku lub rozładunku sam z pamięci. OnStartupComplete jest wywoływana tylko wówczas, jeżeli dodatek został połączony podczas uruchamiania i OnBeginShutdown jest wywoływana tylko wówczas, jeżeli dodatek jest rozłączane przez hosta podczas zamykania systemu.

Ponieważ podczas pożaru te zdarzenia interfejsu użytkownika aplikacji hosta jest całkowicie aktywny, mogą być jedynym sposobem wykonywania pewnych działań, które w przeciwnym razie są niedostępne z OnConnection i OnDisconnection.

Rejestrowanie dodatku COM

Oprócz normalnych rejestracji COM dodatek COM musi się zarejestrować z każdej aplikacji pakietu Office, w którym działa. Aby zarejestrować z określonej aplikacji, dodatek należy utworzyć klucza podrzędnego, używając jego identyfikatora ProgID jako nazwa klucza w następującej lokalizacji:
HKEY_CURRENT_USER\Software\Microsoft\Office\<OfficeApp>\Addins\<ProgID>
Dodatek można podać wartości w tej lokalizacji klucza wyświetlana przyjazna nazwa i pełny opis. Ponadto dodatek należy określić jego zachowanie żądane obciążenia przy użyciu wartość DWORD o nazwie "loadbehavior." Ta wartość określa sposób dodatek jest ładowany przez aplikację hosta i składa się z kombinacji następujących wartości:
  • 0 = Rozłącz - nie jest załadowany.
  • 1 = Połączono - jest ładowany.
  • 2 = Bootload - obciążenia na uruchamianie aplikacji.
  • 8 = DemandLoad - obciążenia tylko wtedy, gdy jest to wymagane przez użytkownika.
  • 16 = ConnectFirstTime - obciążenie tylko raz (następnego uruchomienia).
Typowy podana jest 0x03 (połączono | Bootload).

Dodatki, które implementują IDTExtensibility2 powinien również określić wartość typu DWORD wartość o nazwie "CommandLineSafe", aby wskazać, czy są one bezpieczne dla operacji, które nie obsługują interfejsu użytkownika. Wartość 0x00 oznacza FAŁSZ, 0x01 ma wartość True.

Tworzenie dodatku COM

Można utworzyć dodatku COM w jeden z trzech sposobów wymienionych poniżej:

Tworzenie dodatku COM przy użyciu szablonu dodatku Com

Jeśli program Microsoft Office 2000 Developer lub pakietu Microsoft Office XP Developer i Visual Basic 6.0, najprostszym sposobem tworzenia dodatku COM jest użycie szablonu dodać in.vbp COM. Ten projekt jest zlokalizowany w podfolderze ODETools\V9\Samples\OPG\Samples\CH11\VB_COM_AddIn na dysku CD z pakietem Office 2000 Developer. Skopiuj pliki z tego folderu do folderu programu Visual Basic 6.0 Template\Projects, który jest zwykle C:\Program Files\Microsoft Visual Studio\VB98\Template\Projects. Kopiowanie projektu szablonu do tej lokalizacji daje pewność, że szablon pojawi się w oknie dialogowym Nowy projekt programu Visual Basic 6.0. Patrz rozdział 11 Microsoft Office 2000 języka Visual Basic Programmer's Guide więcej informacji o ten szablon i tworzenie dodatki COM.

Tworzenie dodatku COM przy użyciu programu Visual Basic 6 dodatku projektanta

Jeśli masz tylko program Microsoft Visual Basic 6.0 zainstalowany i chcesz używają otoki, dzięki czemu nie trzeba zaimplementować bezpośrednio IDTExtensibility2, można użyć tego samego dodatku Projektant którego użyłaby do budowania dodatku VB6 należy wykonać następujące kroki, aby utworzyć taki dodatek dla programu Microsoft Excel 2000 lub 2002:
  1. Uruchom program Microsoft Visual Basic 6.0 i zaznacz Dodatek jako typu projektu. Klasę projektanta należy dodać do formularza (frmAddin) i projektu (Połącz).
  2. Otwórz Projektant okno Połącz, a następnie wybierz Program Microsoft Excel z Aplikacja listy rozwijanej.
  3. W Podczas ładowania początkowego listy rozwijanej wybierz Autostart.
  4. Usuń frmAddin z programu project.
  5. Z Projekt okno, kliknij prawym przyciskiem myszy Łączenie z element i wybierz Wyświetl kod.
  6. Usuń cały kod w oknie kodu przez projektanta. Ten kod działa, ale nie Office dodatki plug-in VB.
  7. Dodaj następujący kod do projektanta:
       Option Explicit
    
       Dim oXL As Object
       Dim WithEvents MyButton As Office.CommandBarButton
    
       Private Sub AddinInstance_OnConnection(ByVal Application As Object, _
        ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
        ByVal AddInInst As Object, custom() As Variant)
          On Error Resume Next
          MsgBox "My Addin started in " & Application.Name
       
          Set oXL = Application
       
          Set MyButton = oXL.CommandBars("Standard").Controls.Add(1)
             With MyButton
                .Caption = "My Custom Button"
                .Style = 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 there is more than
              ' one application window visible. The property is required
              ' by some Office applications and should be provided.
    
                .Tag = "My Custom Button"
     
              ' The OnAction property is optional but recommended. 
              ' It should be set to the ProgID of the add-in, such 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. 
    
                .OnAction = "!<" & AddInInst.ProgId & ">"
    
                .Visible = True
             End With
       
       End Sub
    
       Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode As _
          AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
          On Error Resume Next
          MsgBox "My Addin was disconnected by " & _
             IIf(RemoveMode = ext_dm_HostShutdown, _
             "Excel shutdown.", "end user.")
          
          MyButton.Delete
          Set MyButton = Nothing
          Set oXL = Nothing
        End Sub
    
       Private Sub MyButton_Click(ByVal Ctrl As Office.CommandBarButton, _
         CancelDefault As Boolean)
          MsgBox "Our CommandBar button was pressed!"
       End Sub
  8. Zapisz projekt i utworzyć MyAddin.dll. Projektant zarejestruje dodatek dla Ciebie.
  9. Otwórz program Microsoft Excel i daje się zauważyć okno komunikatu, gdy dodatek jest załadowane lub wyładowane. Na pasku narzędzi Standardowy będą miały nowy przycisk z etykietą Przycisk Moje niestandardowe że nasze dodatek będzie obsługiwać zaznaczenie.

Tworzenie dodatku COM za pomocą narzędzi

Chociaż nie jako proste, można utworzyć dodatku COM za pomocą programu Microsoft Visual Basic 5.0 i Implementuje słowo kluczowe, aby bezpośrednio implementować interfejs IDTExtensibility2. Jedyną wadą poziomu takiego podejścia jest rejestracja. Ponieważ języka Microsoft Visual Basic nie wiedzieć, jak dodawać klucze wymagane, aby zarejestrować dodatek z pakietem Office, należy to zrobić oddzielnie (w narzędziu instalacji niestandardowej lub przy użyciu skryptu REG).

Korzyścią wynikającą z używania narzędzi jest jednak, że jest bardziej bezpośrednie i bardziej wydajne niż przy użyciu projektanta i umożliwia utworzenie pojedynczego obiektu COM, który można pracować w wielu aplikacjach pakietu Office (zamiast tworzenia oddzielny obiekt połączenia dla każdej aplikacji, którą chcemy, aby pracować w).

Poniżej przedstawiono kroki do zapisu, który implementuje-W użyciu:
  1. Otwórz języka Visual Basic i Utwórz nowy projekt ActiveX DLL. Nazwa projektu MyCOMAddin, a nazwą klasy publicznych Łączenie z.
  2. Z Odwołania okno dialogowe (projekt | Odwołania), dodać odwołanie do biblioteki obiektów Microsoft Office 9.0 (lub 10.0 dla pakietu Office XP) i Projektant dodatku Microsoft biblioteki typów. Jeśli projektant dodatku nie może znaleźć na liście odwołań, należy wyszukać Msaddndr.dll lub Msaddndr.tlb, zazwyczaj znajduje się w folderze "C:\Program files\common files\designer".
  3. W Kod okno Connect, Dodaj następujące informacje:
       Option Explicit
       Implements IDTExtensibility2
    
       Dim oHostApp As Object
       Dim WithEvents MyButton As Office.CommandBarButton
    
      Private Sub IDTExtensibility2_OnConnection(ByVal Application As Object, _
         ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
    
         ByVal AddInInst As Object, custom() As Variant)
      
          On Error Resume Next
        ' Set a reference to the host application...
          Set oHostApp = Application
       
        ' If you aren't in startup, then manually call OnStartupComplete...
          If (ConnectMode <> ext_cm_Startup) Then _
             Call IDTExtensibility2_OnStartupComplete(custom)
          
       End Sub
    
       Private Sub IDTExtensibility2_OnStartupComplete(custom() As Variant)
          Dim oCommandBars As Office.CommandBars
          Dim oStandardBar As Office.CommandBar
       
          On Error Resume Next
        ' Set up a custom button on the "Standard" commandbar...
          Set oCommandBars = oHostApp.CommandBars
          If oCommandBars Is Nothing Then
           ' Outlook has the CommandBars collection on the Explorer object
             Set oCommandBars = oHostApp.ActiveExplorer.CommandBars
          End If
       
          Set oStandardBar = oCommandBars.Item("Standard")
          If oStandardBar Is Nothing Then
           ' Access names it's main toolbar Database
    
             Set oStandardBar = oCommandBars.Item("Database")
          End If
       
        ' In case the button was not deleted, use the exiting one...
          Set MyButton = oStandardBar.Controls.Item("My Custom Button")
             If MyButton Is Nothing Then
    
                Set MyButton = oStandardBar.Controls.Add(1)
                With MyButton
                   .Caption = "My Custom Button"
                   .Style = 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 there is more than
              ' one application window visible. The property is required
              ' by some Office applications and should be provided.
    
                .Tag = "My Custom Button"
     
              ' The OnAction property is optional but recommended. 
              ' It should be set to the ProgID of the add-in, such 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. 
    
                   .OnAction = "!<MyCOMAddin.Connect>"
    
                   .Visible = True
                End With
             End If
     
        ' Display a simple message to know which application you started in...
          MsgBox "Started in " & oHostApp.Name & "."
    
          Set oStandardBar = Nothing
          Set oCommandBars = Nothing
       End Sub
    
       Private Sub IDTExtensibility2_OnDisconnection(ByVal RemoveMode As _
         AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
    
          On Error Resume Next
          If RemoveMode <> ext_dm_HostShutdown Then _
             Call IDTExtensibility2_OnBeginShutdown(custom)
          
          Set oHostApp = Nothing
    
       End Sub
    
       Private Sub IDTExtensibility2_OnBeginShutdown(custom() As Variant)
          On Error Resume Next
        ' Notify the user you are shutting down, and delete the button...
          MsgBox "Our custom Add-In is unloading."
          MyButton.Delete
          Set MyButton = Nothing
       End Sub
    
       Private Sub MyButton_Click(ByVal Ctrl As Office.CommandBarButton,    CancelDefault As Boolean)
          MsgBox "Our CommandBar button was pressed!"
       End Sub
    
       Private Sub IDTExtensibility2_OnAddInsUpdate(custom() As Variant)
          'You do nothing if this is called, but you need to
          'add a comment so Visual Basic properly implements the function...
       End Sub
  4. Zapisz projekt i utworzyć MyCOMAddin.dll. Jednak przed dodatek będzie działać należy skojarzyć z każdej aplikacji pakietu Office, który ma być uruchamiane w. W świecie rzeczywistym narzędzia do konfiguracji można to zrobić podczas instalowania pliku DLL. Dla tej próbki będzie wywoływać funkcję rejestracji bezpośrednio z programu Visual Basic IDE.
  5. Dodaj nowy moduł do projektu. W kodzie Module1 dodaj następujące informacje:
       Option Explicit
    
       Private Declare Function RegCreateKeyEx Lib "advapi32.dll" _
       Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _
       ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As _
       Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, _
       phkResult As Long, lpdwDisposition As Long) As Long
       
       Private Declare Function RegSetValueEx Lib "advapi32.dll" _
       Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As _
       String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, _
       ByVal cbData As Long) As Long
       
       Private Declare Function RegDeleteKey Lib "advapi32.dll" _
       Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) _
       As Long
       
       Private Declare Function RegCloseKey Lib "advapi32.dll" _
       (ByVal hKey As Long) As Long
    
       Private Const HKEY_CURRENT_USER = &H80000001
       Private Const KEY_ALL_ACCESS = &H1F0037
       Private Const REG_CREATED_NEW_KEY = &H1
       Private Const REG_SZ = 1
       Private Const REG_DWORD = 4
    
       'These are the settings for your Add-in...
       Private Const PROGID As String = "MyCOMAddin.Connect"
       Private Const DESCRIPTION As String = "My VB5/6 COM Add-In Sample"
       Private Const LOADBEHAVIOR As Long = 3
       Private Const SAFEFORCOMMANDLINE As Long = 0
    
    
       Public Sub RegisterAll()
          RegisterOfficeAddin "Access"
          RegisterOfficeAddin "Excel"
          RegisterOfficeAddin "FrontPage"
          RegisterOfficeAddin "Outlook"
          RegisterOfficeAddin "PowerPoint"
          RegisterOfficeAddin "Word"
       End Sub
    
       Public Sub UnregisterAll()
          UnRegisterOfficeAddin "Access"
          UnRegisterOfficeAddin "Excel"
          UnRegisterOfficeAddin "FrontPage"
          UnRegisterOfficeAddin "Outlook"
          UnRegisterOfficeAddin "PowerPoint"
          UnRegisterOfficeAddin "Word"
       End Sub
    
       Public Sub RegisterOfficeAddin(sTargetApp As String)
          Dim sRegKey As String
          Dim nRet As Long, dwTmp As Long
          Dim hKey As Long
       
          sRegKey = "Software\Microsoft\Office\" & sTargetApp _
             & "\Addins\" & PROGID
       
          nRet = RegCreateKeyEx(HKEY_CURRENT_USER, sRegKey, 0, _
             vbNullString, 0, KEY_ALL_ACCESS, 0, hKey, dwTmp)
          
          If nRet = 0 Then
             If dwTmp = REG_CREATED_NEW_KEY Then
                Call RegSetValueEx(hKey, "FriendlyName", 0, _
                   REG_SZ, ByVal PROGID, Len(PROGID))
                Call RegSetValueEx(hKey, "Description", 0, _
                   REG_SZ, ByVal DESCRIPTION, Len(DESCRIPTION))
                Call RegSetValueEx(hKey, "LoadBehavior", 0, _
                   REG_DWORD, LOADBEHAVIOR, 4)
                Call RegSetValueEx(hKey, "CommandLineSafe", 0, _
                   REG_DWORD, SAFEFORCOMMANDLINE, 4)
             End If
             Call RegCloseKey(hKey)
          End If
       
       End Sub
    
       Public Sub UnRegisterOfficeAddin(sTargetApp As String)
          Dim sRegKey As String
          sRegKey = "Software\Microsoft\Office\" & sTargetApp _
             & "\Addins\" & PROGID
       
           Call RegDeleteKey(HKEY_CURRENT_USER, sRegKey)
       
       End Sub
  6. Z Natychmiastowe okna (Widok | Okienko bezpośrednie), typ RegisterAll, a następnie naciśnij klawisz ENTER. To spowoduje zarejestrowanie dodatku z wszystkich aplikacji pakietu Office obsługiwane (programu Access, Excel, FrontPage, Outlook, PowerPoint i Word).
  7. Otwórz dowolnej aplikacji pakietu Office wymienionych wcześniej. Zwróć uwagę, w oknie komunikatu, uruchamiania i zamykania systemu oraz niestandardowy przycisk dodane do paska narzędzi Standardowy.
  8. Aby wyrejestrować dodatek, należy wpisać UnregisterAll Visual Basic bezpośrednim, a następnie naciśnij klawisz ENTER.

Materiały referencyjne

"Microsoft Office 2000 języka Visual Basic Programmer's Guide" w rozdziale 11. Dodatki, szablony, kreatorzy i biblioteki.

Aby uzyskać więcej informacji na temat pisania dodatki COM kliknij następujące numery artykułów w celu wyświetlenia tych artykułów z bazy wiedzy Microsoft Knowledge Base:
230689PRZYKŁAD: Comaddin.exe pakietu Office 2000 dodatku COM w języku Visual C++
190253 Projektanci VB6 nie działają w VB5
Aby uzyskać więcej informacji dotyczących projektowania rozwiązań opartych na sieci Web dla programu Microsoft Internet Explorer odwiedź następującą witrynę firmy Microsoft w sieci Web:
http://msdn.microsoft.com/ie/
Uwaga Po dodaniu elementu menu do programu Office Word z dodatku COM Visual Basic przy użyciu kroków, które są wymienione w niniejszym artykule lub podobne metodą, element menu nie działa zgodnie z oczekiwaniami. Aby uzyskać więcej informacji kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
313948Program Word utraci odwołania do elementów menu Obiekt COM (CommandBarControl)

Właściwości

Numer ID artykułu: 238228 - Ostatnia weryfikacja: 22 czerwca 2011 - Weryfikacja: 2.0
Informacje zawarte w tym artykule dotyczą:
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Office XP Developer Edition
  • Microsoft Office 2000 Developer Edition
  • Microsoft Access 2002 Standard Edition
  • Microsoft Access 2000 Standard Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft FrontPage 2002 Standard Edition
  • Microsoft FrontPage 2000 Standard Edition
  • Microsoft Outlook 2002 Standard Edition
  • Microsoft Outlook 2000 Standard Edition
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft PowerPoint 2000 Standard Edition
  • Microsoft Word 2002 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
Słowa kluczowe: 
kbautomation kbhowto kbmt KB238228 KbMtpl
Przetłumaczone maszynowo
WAŻNE: Ten artykuł nie został przetłumaczony przez człowieka, tylko przez oprogramowanie do tłumaczenia maszynowego firmy Microsoft. Firma Microsoft oferuje zarówno artykuły tłumaczone przez ludzi, jak i artykuły tłumaczone maszynowo, dzięki czemu każdy użytkownik może uzyskać dostęp do całej zawartości bazy wiedzy Knowledge Base we własnym języku. Prosimy jednak pamiętać, że artykuły przetłumaczone maszynowo nie zawsze są doskonałe. Mogą zawierać błędy słownictwa, składni i gramatyki, przypominające błędy robione przez osoby, dla których język użytkownika nie jest językiem ojczystym. Firma Microsoft nie odpowiada za wszelkie nieścisłości, błędy lub szkody spowodowane nieprawidłowym tłumaczeniem zawartości oraz za wykorzystanie tej zawartości przez klientów. Oprogramowanie do tłumaczenia maszynowego jest często aktualizowane przez firmę Microsoft.
Anglojęzyczna wersja tego artykułu to:238228

Przekaż opinię

 

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