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

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
Ten artykuł został zarchiwizowany. Jest oferowany „taki, jaki jest” i nie będzie już aktualizowany.
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: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)
dodatek

Ostrzeżenie: ten artykuł przetłumaczono automatycznie

Właściwości

Identyfikator artykułu: 238228 — ostatni przegląd: 12/05/2015 15:21:16 — zmiana: 2.0

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

  • kbnosurvey kbarchive kbautomation kbhowto kbmt KB238228 KbMtpl
Opinia