Bir Office 2000 COM eklentisi Visual Basic'te nasıl

Makale çevirileri Makale çevirileri
Makale numarası: 238228 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Yeni, bir Microsoft Office 2000 ve sonraki uygulama geliştirmek ve Office uygulamalarını denetlemek için eklentileri oluşturmak için tasarım mimarisi Tekdüzen. Bu eklentiler, COM eklentileri olarak adlandırılır. Bu makalede, bir COM Visual Basic'i kullanma eklentisi oluşturma yöntemlerini gösteren.

Daha fazla bilgi

Bir COM eklentisi Microsoft eklenti Tasarımcısı Tür kitaplığında (Msaddndr.dll) açıklandığı gibi IDTExensibility2 arabirimini uygulayan bir inprocess COM (ActiveX DLL) sunucusudur. Tüm COM eklentilerini Bu arabirimden devralır ve her beş yöntemlerinden biri uygulamalıdır.

OnConnection

COM eklentisini bağlı her OnConnection olayı harekete. Eklentiyi başlatma sırasında son kullanıcı tarafından ya da Otomasyon yoluyla bağlı olabilir. OnConnection başarıyla dönerse, eklentinin yüklenmesi denir. Bir hata döndürdü, ana uygulama eklenti için başvuru hemen serbest bırakır ve nesne yok edilir.

OnConnection aşağıdaki dört parametre yer alır:
  • Uygulama - BIR ana uygulama nesnesine başvuru.
  • ConnectMode - eklentinin nasıl bağlı olduğunu belirten BIR sabit.
    • ext_cm_AfterStartup - COM Eklentileri iletişim kutusundan son kullanıcı tarafından başlatıldı.
    • ext_cm_CommandLine - komut satırından bağlandı. (Office uygulamaları için COM eklentileri oluşturma için geçerli değildir.)
    • ext_cm_External - Otomasyon yoluyla bir dış uygulama tarafından bağlandı. (Office uygulamaları için COM eklentileri oluşturma için geçerli değildir.)
    • ext_cm_Startup - uygulama başlangıçta ana makinesi tarafından başlatıldı. (Bu davranış kayıt defterinde bir ayar tarafından kontrol edilir.)
  • AddInInst - bu eklenti ana bilgisayar uygulamasının <a1>COM eklentileri</a1> koleksiyonunda başvurduğu COMAddIn nesnesine BIR başvuru.
  • Özel - değişkenleri, kullanıcı tanımlı veri saklayabilen bir dizisi.

OnDisconnection

COM eklentisini kesildiğinde ve yalnızca bu belleği kaldırır önce OnDisconnection olayı harekete. Eklenti herhangi bir temizleme kaynakların bu olayda gerçekleştirin ve ana uygulamaya yapılan değişiklikleri geri.

OnDisconnection aşağıdaki iki parametre alır:
  • RemoveMode - eklentinin nasıl kesildi belirten BIR sabit.
    • ext_dm_HostShutdown - ana uygulama kapandığında bağlantı kesildi.
    • ext_dm_UserClosed - son kullanıcı ya da bir Otomasyon denetleyicisi bağlantısı kesildi.
  • Özel - değişkenleri, kullanıcı tanımlı veri saklayabilen bir dizisi.

Onaddınsupdate

Kayıtlı COM eklentileri kümesi değiştiğinde Onaddınsupdate olayı harekete. Her bir COM eklentisi yüklenmiş veya ana bilgisayar uygulamadan kaldırıldı, başka bir deyişle, bu olay harekete.

OnStartupComplete ve OnBeginShutdown

Ana bilgisayar uygulamasının ayrıldı veya uygulama yükleme veya kendisi bellekten kaldırılması meşgul olduğu için kullanıcı etkileşimi kaçınılmalıdır bir duruma girerken OnStartupComplete ve OnBeginShutdown yöntemleri denir. OnStartupComplete yalnızca başlangıç sırasında eklentiniz bağlandı ve eklenti ana bilgisayar tarafından kapatma sırasında kesilirse OnBeginShutdown yalnızca adlı olarak da adlandırılır.

Bu olaylar ba?latmak için kullanıcı arabirimi için ana bilgisayar uygulamasının tam etkin olduğundan, aksi durumda OnConnection ve OnDisconnection kullanılamaz olacak belirli eylemleri gerçekleştirmek için tek yol olabilirler.

COM eklentisini kaydediliyor

Normal COM kayıt ek olarak, bir COM eklentisi kendisi içinde çalışan her Office uygulaması ile kaydetmeniz gerekir. Kendisini, belirli bir uygulama ile kaydetmek için <a0></a0>, eklenti, aşağıda belirtilen konumda altında anahtar adı olarak, Progıd'ni kullanarak, bir alt anahtarı oluşturmanız gerekir:
HKEY_CURRENT_USER\Software\Microsoft\Office\<OfficeApp>\Addins\<ProgID>
eklenti değerleri kolay görünen ad hem de tam bir açıklaması için anahtar bu konumda sağlayabilir. Buna ek olarak, eklentiyi istenen yükleme davranışı "LoadBehavior." adlı bir DWORD değeri'ni kullanarak belirtmeniz gerekir Bu değer, nasıl eklenti ana bilgisayar uygulaması tarafından yüklenir ve aşağıdaki değerlerin birleşimini yapılan belirler:
  • 0 Bağlantıyı Kes'i = - yüklü değil.
  • 1 Bağlı = - yüklenen.
  • 2 Bootload - <a1>Uygulama</a1> başlangıç üzerindeki yükü =.
  • 8 - DemandLoad kullanıcı tarafından istendiğinde yükle =.
  • 16 - ConnectFirstTime yalnızca bir kez (başlangıçta sonraki) yük =.
Belirtilen normal 0x03 değeridir (bağlı | Bootload).

ıdtextensibility2 uygulayan eklentileri DWORD belirtmeniz gerekir "bir kullanıcı arabirimi desteği olan tüm işlemler için güvenli olup olmadıklarını belirtmek için çağrılan CommandLineSafe" değeri. 0X00 değeri FALSE, true 0x01 olan anlamına gelir.

Bir COM eklentisi oluşturma

Bir COM Add-ın aşağıda belirtilen bir üç yoldan biriyle oluşturabilirsiniz:

COM eklenti şablonu kullanarak bir COM eklentisi oluşturma

Microsoft Office 2000 Developer, Microsoft Office XP Developer ve Visual Basic 6.0 varsa, en kolay yolu, bir COM eklentisi oluşturmak için COM ekleme in.vbp şablon kullanmaktır. Bu proje ODETools\V9\Samples\OPG\Samples\CH11\VB_COM_AddIn alt Office 2000 Developer CD'sinde bulunur. Dosyaları bu klasöre genelde C:\Program Files\Microsoft Visual Studio\VB98\Template\Projects olan Visual Basic 6.0 Template\Projects klasörüne kopyalayın. Şablon proje bu konuma kopyalamayı, şablon, Visual Basic 6.0 New Project</a1> iletişim kutusunda görünen garanti eder. Bölüm 11, bu şablon ve COM eklentileri oluşturma hakkında daha fazla bilgi için Microsoft Office 2000 Visual Basic Programmer's Guide) konusuna bakın.

Visual Basic 6 eklenti Tasarımcısı'nı kullanarak bir COM eklentisi oluşturma

Varsa, yalnızca Microsoft Visual Basic 6. 0'ın yüklü ve böylece doğrudan ıdtextensibility2 uygulamak gereken bir sarmalayıcı kullanmak istiyorsanız, bu tür bir eklenti, Microsoft Excel 2000 veya 2002 oluşturmak için aşağıdaki adımları izleyerek VB6 Ekle In. oluşturmaya kullanan aynı eklenti Tasarımcısı'nı kullanabilirsiniz:
  1. Microsoft Visual Basic 6. 0'ı başlatın ve eklentisi proje tipini seçin. Bu proje (Bağlan) ve (frmAddin) form tasarımcısı sınıf eklemelisiniz.
  2. Bağlan için Tasarımcısı penceresini açın ve Microsoft ExcelUygulama</a1> a?a?? aç?lan listeden seçin.
  3. Ilk yükleme davranışı a?a?? aç?lan listesinden Başlangıç ' ı seçin.
  4. FrmAddin projeden kaldır.
  5. Proje penceresinde, madde Bağlan ' ı sağ tıklatın ve görünümü kodunu seçin.
  6. Tüm kod Tasarımcısı'nın kod penceresinde kaldırın. Bu kod, VB Eklentiler ancak değil Office Eklentileri için çalışır.
  7. Tasarımcıya aşağıdaki kodu ekleyin:
       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. Projeyi kaydedin ve MyAddin.dll oluşturun. Tasarımcı eklenti sizin için kaydeder.
  9. Eklentiyi yükledi kaldırıldı, açık bir Microsoft Excel ve bir ileti kutusu görürsünüz. Standart araç çubuğunda, yeni bir düğme seçili olduğunda bizim eklenti sonuna işleyeceği Resimlerim özel düğme etiketi gerekir.

Bir COM eklentisini ımplements'i kullanarak oluşturma

Olarak değil basit karşın, bir COM eklentisi oluşturabileceğiniz doğrudan ıdtextensibility2 arabirimi uygulamak için Microsoft Visual Basic 5.0 ve ımplements anahtar sözcüğünü kullanarak. Bu yaklaşımın bir tek downside kayıt bağlıdır. Microsoft Visual Basic eklenti, Office ile birlikte kaydetmek için gereken anahtarlarının nasıl biliyor olduğundan, bunu ayrı olarak (bir özel bir kurma programı, veya REG komut dosyası kullanarak) gerekir.

Ancak ımplements kullanmanın avantajı, daha doğrudan ve Tasarımcısı'nı kullanarak daha verimli olduğu ve (çalışmak istediğiniz her uygulama için ayrı bir Connect nesnesi oluşturmak yerine), birden çok Office uygulamalarında çalışabilmeniz için tek bir COM nesnesi oluşturmak bize verir olur.

Bir Ekle yazma - ımplements'ı kullanarak adımları aşağıda verilmektedir:
  1. Visual Basic'nı açın ve yeni bir proje ActiveX DLL'I oluşturun. <a1>Ad</a1> MyCOMAddin proje ve genel adı Bağlan sınıfı.
  2. <a0>Başvurular</a0> iletişim kutusundan (proje | başvurular), Microsoft Office'in (veya Office XP 10.0) 9.0 Nesne kitaplığı ve eklenti, Microsoft Designer tür kitaplığına başvuru ekleyin. Eklenti Tasarımcısı başvurular) listesinde bulamazsa, Msaddndr.dll veya Msaddndr.tlb, genellikle "C:\Program Files\Common Files\Designer" klasöründe Gözat.
  3. Bağlan ve kod penceresinde aşağıdakileri ekleyin:
       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. Projeyi kaydedin ve MyCOMAddin.dll oluşturun. Eklentiniz çalışmadan önce çalışmak istediğiniz her Office uygulaması ile ilişkilendirmeniz gerekir. DLL yüklendiğinde gerçek dünyada bir kurma programı bunu yapabilirsiniz. Bu örnek, doğrudan Visual Basic IDE bir kayıt işlevini çağırır.
  5. Yeni bir modül projeye ekleyin. Aşağıdaki kodu Module1 ekleyin:
       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. <a0>Hemen</a0> penceresinden (Görünüm | Anlık pencere) RegisterAll yazın ve ENTER tuşuna basın. Bu eklenti desteklenen tüm Office uygulamaları ile (Access, Excel, FrontPage, Outlook, PowerPoint ve Word) kaydeder.
  7. Açık Office uygulamalarından biri önceden listede. Ileti kutusu başlatma ve kapatma ve standart araç çubuğuna eklenen bir özel düğme dikkat edin.
  8. Eklentinin kaydını silmek istediğinizde, Visual Basic komut penceresi içinde UnregisterAll yazın ve ENTER tuşuna basın.

Referanslar

Bölüm 11 "Microsoft Office 2000 Visual Basic Programmer's Guide". Eklentiler, şablonlar, sihirbazlar ve kitaplıklar.

COM eklentileri yazma hakkında daha fazla bilgi için Microsoft Knowledge Base'deki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
230689Örnek: Comaddin.exe Office 2000 COM Visual C++ ile yazılmış eklentisi
190253VB6 tasarımcılarının VB5'de çalışmıyor
Microsoft ınternet Explorer için Web tabanlı çözümler geliştirme hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin:
http://msdn.microsoft.com/ie/
Not Menü öğesi, bir menü öğesi Office Word'Ü bir Visual Basic COM eklentisi bu makalede listelenen adımları izleyerek veya benzer bir yöntem kullanarak eklediğinizde, beklendiği gibi çalışmaz. Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
313948Word (CommandBarControl) COM nesnesinin menü öğeleri başvuru kaybeder.

Özellikler

Makale numarası: 238228 - Last Review: 24 Ocak 2007 Çarşamba - Gözden geçirme: 6.2
Bu makaledeki bilginin uygulandığı durum:
  • 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
  • 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
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Anahtar Kelimeler: 
kbmt kbautomation kbhowto KB238228 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:238228

Geri Bildirim Ver

 

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