Làm thế nào để xây dựng một Office 2000 COM add-in trong Visual Basic

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:238228
Bài viết này đã được lưu trữ. Bài viết được cung cấp "nguyên trạng" và sẽ không còn được cập nhật nữa.
TÓM TẮT
Microsoft Office 2000 và sau đó hỗ trợ một mới, thống nhất thiết kế kiến trúc cho việc xây dựng ứng dụng add-in để tăng cường và kiểm soát các ứng dụng văn phòng. Add-in ở đây được gọi là COM Add-Ins. Bài viết này sẽ chứng minh làm thế nào để xây dựng một COM Add-In bằng cách sử dụng Visual Basic.
THÔNG TIN THÊM
Một COM Add-In có một inprocess COM server (một DLL ActiveX) mà thực hiện các giao diện IDTExensibility2 như mô tả trong thư Microsoft Add-In nhà thiết kế loại viện (Msaddndr.dll). Tất cả các COM add-in kế thừa từ giao diện này và phải thực hiện mỗi phương pháp năm của mình.

OnConnection

Sự kiện OnConnection cháy bất cứ khi nào COM add-in được kết nối. Add-in có thể được kết nối trên khởi động, người dùng cuối, hoặc thông qua tự động hóa. Nếu OnConnection trả về thành công, add-in được gọi là nạp. Nếu một lỗi được trả lại, các ứng dụng máy chủ lưu trữ ngay lập tức phát hành của nó tham chiếu đến add-in và các đối tượng bị phá hủy.

OnConnection mất các tham số bốn sau đây:
  • Ứng dụng - một tham chiếu đến đối tượng ứng dụng máy chủ lưu trữ.
  • ConnectMode - một hằng số xác định như thế nào add-in đã được kết nối.
    • ext_cm_AfterStartup - bắt đầu bởi người dùng cuối từ hộp thoại COM add-in.
    • ext_cm_CommandLine - kết nối từ dòng lệnh. (Không áp dụng để xây dựng COM add-in cho các ứng dụng văn phòng.)
    • ext_cm_External - kết nối bằng ứng dụng bên ngoài thông qua tự động hóa. (Không áp dụng để xây dựng COM add-in cho các ứng dụng văn phòng.)
    • ext_cm_Startup - bắt đầu bởi máy chủ ứng dụng khi khởi động. (Hành vi này được điều khiển bởi một thiết lập trong sổ đăng ký.)
  • AddInInst - một tham chiếu đến đối tượng COMAddIn đề cập đến này thêm vào trong bộ sưu tập COMAddIns cho các ứng dụng máy chủ lưu trữ.
  • Tuỳ chỉnh - một mảng của các phiên bản có thể chứa dữ liệu người dùng xác định.

OnDisconnection

Sự kiện OnDisconnection cháy khi các COM thêm nhập bị ngắt kết nối và ngay trước khi nó unloads từ bộ nhớ. Add-in nên thực hiện bất kỳ dọn dẹp các nguồn lực trong sự kiện này, và khôi phục lại bất kỳ thay đổi nào được thực hiện cho các ứng dụng máy chủ lưu trữ.

OnDisconnection mất hai tham số sau đây:
  • RemoveMode - một hằng số xác định như thế nào add-in đã bị ngắt.
    • ext_dm_HostShutdown - ngắt kết nối khi đóng cửa các ứng dụng máy chủ lưu trữ.
    • ext_dm_UserClosed - ngắt kết nối của người dùng hoặc một bộ điều khiển tự động hóa.
  • Tuỳ chỉnh - một mảng của các phiên bản có thể chứa dữ liệu người dùng xác định.

OnAddInsUpdate

Sự kiện OnAddInsUpdate cháy khi thay đổi các thiết lập của đăng ký COM add-in. Nói cách khác, bất cứ khi nào một COM add-in được cài đặt hoặc gỡ bỏ từ các ứng dụng máy chủ lưu trữ, sự kiện này cháy.

OnStartupComplete và OnBeginShutdown

Cả hai OnStartupComplete và OnBeginShutdown phương pháp được gọi là khi các ứng dụng máy chủ đã để lại hoặc đưa vào một tiểu bang nơi tương tác người dùng cần tránh vì ứng dụng đang bận tải hoặc xếp dỡ chính nó từ bộ nhớ. OnStartupComplete chỉ được gọi là nếu bạn thêm trong đã được kết nối trong khi khởi động, và OnBeginShutdown chỉ được gọi là nếu bạn thêm trong bị ngắt kết nối bởi máy chủ trong tắt máy.

Bởi vì giao diện người dùng cho các ứng dụng máy chủ lưu trữ là hoạt động đầy đủ khi những sự kiện cháy, họ có thể là cách duy nhất để thực hiện một số hành động mà nếu không sẽ không có sẵn từ OnConnection và OnDisconnection.

Đăng ký COM add-in

Thêm vào bình thường COM đăng ký, một COM thêm vào cần đăng ký chính nó với mỗi ứng dụng văn phòng, trong đó nó chạy. Để đăng ký chính nó với một ứng dụng cụ thể, add-in nên tạo ra một phụ chính, bằng cách sử dụng ProgID của nó như là tên cho phím, theo vị trí sau:
HKEY_CURRENT_USER\Software\Microsoft\Office\<OfficeApp>\Addins\<ProgID>
Add-in có thể cung cấp giá trị tại vị trí chủ chốt này đối với cả hai tên thân thiện hiển thị và một mô tả đầy đủ. Ngoài ra, add-in nên xác định hành vi mong muốn tải của nó bằng cách sử dụng một giá trị DWORD được gọi là "loadbehavior." Giá trị này sẽ xác định như thế nào add-in được nạp bởi các ứng dụng máy chủ lưu trữ và bao gồm một sự kết hợp của các giá trị sau:
  • 0 = Ngắt kết nối - không được nạp.
  • 1 = Kết nối - được nạp.
  • 2 = Bootload - tải về ứng dụng khởi động.
  • 8 = DemandLoad - tải chỉ khi yêu cầu của người sử dụng.
  • 16 = ConnectFirstTime - tải chỉ một lần (trên khởi động tiếp theo).
Giá trị điển hình xác định là 0x03 (kết nối | Bootload).

Add-in mà thực hiện IDTExtensibility2 cũng nên chỉ định một DWORD giá trị được gọi là "CommandLineSafe" để chỉ ra cho dù họ là an toàn cho các hoạt động hỗ trợ một giao diện người dùng. Một giá trị của 0x00 có nghĩa là sai, 0x01 là đúng sự thật.

Xây dựng một COM add-in

Bạn có thể xây dựng một COM Add-In trong một trong ba cách được đề cập dưới đây:

Xây dựng một COM thêm vào bằng cách sử dụng Com thêm trong mẫu

Nếu bạn có hệ điều hành Microsoft Office 2000 nhà phát triển hoặc Microsoft Office XP nhà phát triển và Visual Basic 6.0, cách dễ nhất để xây dựng một COM Add-in là để sử dụng COM in.vbp thêm mẫu. Dự án này nằm trong thư mục con ODETools\V9\Samples\OPG\Samples\CH11\VB_COM_AddIn trên Office 2000 Developer CD. Sao chép các tệp trong cặp này vào cặp Visual Basic 6.0 Template\Projects, mà thường là C:\Program Files\Microsoft Visual Studio\VB98\Template\Projects. Sao chép dự án mẫu cho vị trí này sẽ đảm bảo rằng các bản mẫu xuất hiện trong hộp thoại Visual Basic 6.0 dự án mới. Xem chương 11 của Microsoft Office 2000 Visual Basic trình của hướng dẫn cho biết thêm thông tin về mẫu này và tạo COM Add-ins.

Xây dựng một COM thêm vào bằng cách sử dụng Visual Basic 6 thêm thuộc nhà thiết kế

Nếu bạn có chỉ cần Microsoft Visual Basic 6.0 cài đặt và muốn sử dụng một wrapper do đó bạn không cần phải trực tiếp thực hiện IDTExtensibility2, bạn có thể sử dụng người cùng thiết Add-In kế mà bạn sẽ sử dụng để xây dựng một Add-In. VB6 làm theo các bước sau để xây dựng như một add-in cho Microsoft Excel 2000 hoặc 2002:
  1. Bắt đầu Microsoft Visual Basic 6.0 và chọn Addin như các loại dự án. Điều này nên thêm một lớp học thiết kế dự án (kết nối) và một hình thức (frmAddin).
  2. Mở các Trình thiết kế cửa sổ cho kết nối và chọn Microsoft Excel từ các Ứng dụng danh sách thả xuống.
  3. Trong các Đầu tiên tải hành vi danh sách thả xuống, chọn Khởi động.
  4. Gỡ bỏ frmAddin từ các dự án.
  5. Từ các Dự án cửa sổ, bấm chuột phải vào các Kết nối mục và chọn xem mã.
  6. Loại bỏ tất cả các mã trong cửa sổ mã của nhà thiết kế. Mã này hoạt động cho BB add-in, nhưng không phải văn phòng add-in.
  7. Thêm mã sau đây để các nhà thiết kế:
       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. Lưu dự án và tạo các MyAddin.dll. Các nhà thiết kế sẽ đăng ký add-in cho bạn.
  9. Mở Microsoft Excel và bạn sẽ thấy một hộp thư khi add-in có tải và bốc dỡ. Trên thanh công cụ tiêu chuẩn, bạn sẽ có một nút mới có nhãn Nút tuỳ chỉnh của tôi rằng chúng tôi thêm vào sẽ xử lý khi chọn.

Xây dựng một COM thêm vào bằng cách sử dụng thực hiện

Trong khi không phải là đơn giản, bạn có thể tạo một COM Add-In bằng cách sử dụng Microsoft Visual Basic 5.0 và các Thực hiện từ khóa trực tiếp thực hiện giao diện IDTExtensibility2. Nhược điểm duy nhất để phương pháp này là đăng ký. Kể từ khi Microsoft Visual Basic không biết làm thế nào để thêm các phím cần thiết để đăng ký add-in với văn phòng, bạn sẽ cần phải làm điều này một cách riêng biệt (trong một tiện ích thiết lập tuỳ chỉnh, hoặc bằng cách sử dụng một kịch bản REG).

Tuy nhiên, lợi thế để sử dụng thực hiện là nó là trực tiếp hơn và hiệu quả hơn bằng cách sử dụng các nhà thiết kế, và nó cho phép chúng tôi để tạo ra một đối tượng COM duy nhất mà có thể làm việc trong các ứng dụng văn phòng nhiều (thay vì của việc tạo ra một đối tượng kết nối riêng biệt cho mỗi ứng dụng, chúng tôi muốn làm việc tại).

Dưới đây là các bước để viết một Add-trong sử dụng thực hiện:
  1. Mở Visual Basic và tạo ra một dự án mới ActiveX DLL. Tên dự án MyCOMAddin, và đặt tên các lớp học công cộng Kết nối.
  2. Từ các Tham khảo hộp thoại (dự án | Tài liệu tham khảo), thêm một tham chiếu đến các Microsoft Office 9,0 (hoặc 10,0 cho Office XP) đối tượng và thư Microsoft Add-In thiết kế kiểu viện. Nếu bạn không thể tìm thấy các Add-In nhà thiết kế trong danh sách tham khảo, bạn nên trình duyệt cho Msaddndr.dll hoặc Msaddndr.tlb, thường nằm trong thư mục "C:\Program files\common files\designer".
  3. Trong các Mã cửa sổ cho kết nối, địa chỉ sau đây:
       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. Lưu dự án và tạo các MyCOMAddin.dll. Tuy nhiên, trước khi bạn thêm trong sẽ làm việc, bạn cần phải liên kết nó với mỗi ứng dụng văn phòng mà bạn muốn chạy nó. Trong thế giới thực, một tiện ích thiết lập có thể làm điều này khi DLL được cài đặt. Cho mẫu này, bạn sẽ gọi một chức năng đăng ký trực tiếp từ IDE Visual Basic.
  5. Thêm một mô-đun mới vào dự án. Trong mã cho Module1, thêm dưới đây:
       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. Từ các Ngay lập tức cửa sổ (xem | Cửa sổ ngay lập tức), loại RegisterAll, và sau đó nhấn ENTER. Điều này sẽ đăng ký add-in với tất cả các Office applications hỗ trợ (Access, Excel, FrontPage, Outlook, PowerPoint và Word).
  7. Mở bất kỳ ứng dụng văn phòng liệt kê trước. Nhận thấy hộp thư trên khởi động và tắt máy, và nút tùy chỉnh thêm vào thanh công cụ tiêu chuẩn.
  8. Khi bạn muốn unregister add-in, gõ UnregisterAll trong cửa sổ Visual Basic ngay lập tức và sau đó nhấn ENTER.
THAM KHẢO
"Microsoft Office 2000 Visual Basic Programmer's Guide", chương 11. Add-in, mẫu, Wizards và thư viện.

Để biết thêm chi tiết về cách viết COM add-in, nhấp vào số bài viết sau để xem các bài viết trong cơ sở kiến thức Microsoft:
230689MẪU: Comaddin.exe Office 2000 COM add-in được viết bằng Visual C++
190253 Nhà thiết kế VB6 không hoạt động trong VB5
Để biết thêm chi tiết về phát triển giải pháp dựa trên Web cho Microsoft Internet Explorer, ghé thăm Web site sau của Microsoft:Chú ý Khi bạn thêm một mục trình đơn Office Word từ một Visual Basic COM thêm vào bằng cách sử dụng các bước được liệt kê trong bài viết này hoặc bằng cách sử dụng một phương pháp tương tự, mục trong trình đơn không làm việc như mong đợi. Để biết thêm thông tin, hãy bấm vào số bài viết sau để xem bài viết trong Cơ sở Kiến thức Microsoft:
313948Word sẽ mất tài liệu tham khảo để COM đối tượng mục trình đơn (CommandBarControl)
addin

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 238228 - Xem lại Lần cuối: 12/05/2015 15:21:19 - Bản sửa đổi: 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 KbMtvi
Phản hồi