Visual Basic .NET을 사용하여 Office COM 추가 기능을 작성하는 방법

기술 자료 번역 기술 자료 번역
기술 자료: 302896 - 이 문서가 적용되는 제품 보기.
이 문서는 이전에 다음 ID로 출판되었음: KR302896
모두 확대 | 모두 축소

이 페이지에서

요약

Microsoft Office 2000 이후 버전에서는 Office 응용 프로그램을 개선하고 제어하는 응용 프로그램 추가 기능을 작성할 수 있는 일관된 새로운 설계 아키텍처를 지원합니다. 이러한 추가 기능을 COM 추가 기능이라고 합니다. 이 문서에서는 Office COM 추가 기능을 설명하고 Microsoft Visual Basic .NET을 사용하여 Office COM 추가 기능을 작성하는 방법을 단계별로 설명합니다.

IDTExensibility2 인터페이스

COM 추가 기능은 Microsoft Add-in Designer 형식 라이브러리(Msaddndr.dll)에 설명되어 있는 것처럼 IDTExensibility2 인터페이스를 구현하는 in-process COM 서버나 ActiveX DLL(동적 연결 라이브러리)입니다. 모든 COM 추가 기능은 이 인터페이스에서 상속되며 5가지 메서드를 각각 구현해야 합니다.

OnConnection

OnConnection 이벤트는 COM 추가 기능을 연결할 때마다 발생합니다. 추가 기능은 시작할 때 연결하거나, 최종 사용자가 연결하거나, 자동화를 통해 연결할 수 있습니다. OnConnection이 성공적으로 반환되면 추가 기능이 로드된 것입니다. 오류가 반환되면 호스트 응용 프로그램은 즉시 추가 기능에 대한 참조를 해제하며 개체는 소멸됩니다.

OnConnection은 다음 네 가지 매개 변수를 사용합니다.
  • Application - 호스트 응용 프로그램 개체에 대한 참조
  • ConnectMode - 추가 기능을 연결하는 방법을 지정하는 상수. 다음과 같은 방법으로 추가 기능을 연결할 수 있습니다.
    • ext_cm_AfterStartup - 최종 사용자가 COM 추가 기능 대화 상자에서 추가 기능을 시작합니다.
    • ext_cm_CommandLine - 명령줄에서 추가 기능을 연결합니다. Office 응용 프로그램용 COM 추가 기능을 작성하는 데는 적용되지 않습니다.
    • ext_cm_External - 외부 응용 프로그램에서 자동화를 통해 추가 기능을 연결합니다. Office 응용 프로그램용 COM 추가 기능을 작성하는 데는 적용되지 않습니다.
    • ext_cm_Startup - 응용 프로그램을 시작할 때 호스트에서 추가 기능을 시작합니다. 이 동작은 레지스트리의 설정으로 제어됩니다.
  • AddInInst - 호스트 응용 프로그램용 COMAddIns 컬렉션에서 이 추가 기능을 참조하는 COMAddIn 개체에 대한 참조
  • Custom - 사용자 정의 데이터를 저장할 수 있는 Variant 형식 값의 배열

OnDisconnection

OnDisconnection 이벤트는 COM 추가 기능의 연결이 해제될 때와 메모리에서 언로드되기 직전에 발생합니다. 추가 기능에서는 이 이벤트에 있는 리소스를 지우고 호스트 응용 프로그램의 변경 내용을 복원해야 합니다.

OnDisconnection은 다음 두 가지 매개 변수를 사용합니다.
  • RemoveMode - 추가 기능의 연결을 해제하는 방법을 지정하는 상수. 다음과 같은 방법으로 추가 기능의 연결을 해제할 수 있습니다.
    • ext_dm_HostShutdown - 호스트 응용 프로그램을 닫을 때 추가 기능의 연결을 해제합니다.
    • ext_dm_UserClosed - 최종 사용자나 자동화 컨트롤러가 추가 기능의 연결을 해제합니다.
  • Custom - 사용자 정의 데이터를 저장할 수 있는 Variant 형식 값의 배열

OnAddInsUpdate

OnAddInsUpdate 이벤트는 등록된 COM 추가 기능 집합이 변경될 때 발생합니다. 즉, COM 추가 기능을 호스트 응용 프로그램에서 설치하거나 제거할 때마다 이 이벤트가 실행됩니다.

OnStartupComplete 및 OnBeginShutdown

OnStartupCompleteOnBeginShutdown 메서드는 호스트 응용 프로그램이 메모리에서 로드되거나 언로드되고 있기 때문에 사용자 상호 작용을 피해야 하는 상태가 끝났거나 시작되는 경우에 호출됩니다. OnStartupComplete는 시작 중에 추가 기능이 연결된 경우에만 호출되고, OnBeginShutdown은 종료 중에 호스트에서 추가 기능의 연결을 해제한 경우에만 호출됩니다.

호스트 응용 프로그램의 사용자 인터페이스는 이러한 이벤트가 발생할 때 완전히 활성화되기 때문에 이벤트가 발생하지 않으면 OnConnectionOnDisconnection에서 특정 작업을 수행하지 못할 수도 있습니다.

COM 추가 기능 등록

일반 COM 등록 이외에 COM 추가 기능은 실행되는 각 Office 응용 프로그램에 등록되어야 합니다. 특정 응용 프로그램에 등록하려면 추가 기능에서는 키 이름으로 ProgID를 사용하여 다음 위치에 하위 키를 만들어야 합니다.
HKEY_CURRENT_USER\Software\Microsoft\Office\ OfficeApp \Addins\ ProgID
추가 기능에서는 친숙한 표시 이름과 전체 설명에 대한 값을 이 키 위치에 제공할 수 있으며,
LoadBehavior
라는 DWORD 값을 사용하여 원하는 로드 동작도 지정해야 합니다. 이 값은 다음 값의 조합으로 구성되며 호스트 응용 프로그램에서 추가 기능을 로드하는 방법을 지정합니다.
  • 0 = Disconnect - 로드되지 않음
  • 1 = Connected - 로드됨
  • 2 = Bootload - 응용 프로그램 시작 시 로드
  • 8 = DemandLoad - 사용자가 요청할 때만 로드
  • 16 = ConnectFirstTime - 한 번만(다음에 시작할 때) 로드
일반적으로 지정되는 값은 0x03(Connected | Bootload)입니다.

IDTExtensibility2를 구현하는 추가 기능은
CommandLineSafe
라는 DWORD 값을 지정하여 사용자 인터페이스를 지원하지 않는 작업에 해당 추가 기능을 안전하게 사용할 수 있는지 여부를 나타내야 합니다. 0x00 값은 False를 나타내고 0x01 값은 True를 나타냅니다.

Visual Basic .NET을 사용하여 COM 추가 기능을 작성하는 방법

앞에서 설명했듯이 Office COM 추가 기능은 COM 런타임 계층을 통해 Office 응용 프로그램에 의해 활성화되는 in-process COM 서버입니다. 따라서 .NET에서 COM 추가 기능을 개발하려면 해당 추가 기능 구성 요소를 .NET에서 구현한 다음 COM interop 계층을 통해 COM 클라이언트(Office 응용 프로그램)에 제공해야 합니다.

Visual Basic .NET에서 COM 추가 기능을 만들려면 다음과 같이 하십시오.
  1. Visual Basic .NET에서 클래스 라이브러리 프로젝트를 만듭니다.
  2. IDTExtensibility2를 구현하는 형식 라이브러리에 대한 참조를 추가합니다. 이에 대한 기본 interop 어셈블리는 Extensibility라는 이름으로 이미 사용 가능한 상태입니다.
  3. Microsoft Office 개체 라이브러리에 대한 참조를 추가합니다. 이에 대한 기본 interop 어셈블리는 Office라는 이름으로 이미 사용 가능한 상태입니다.
  4. IDTExtensibility2를 구현하는 클래스 라이브러리에서 공용 클래스를 만듭니다.
  5. 클래스 라이브러리를 작성한 후에는 COM interop에 대한 라이브러리를 등록합니다. 이렇게 하려면 이 클래스 라이브러리에 대해 강력한 이름의 어셈블리를 만든 다음 COM interop에 등록합니다. Regasm.exe를 사용하면 COM interop에 대한 .NET 구성 요소를 등록할 수 있습니다.
  6. Office 응용 프로그램이 추가 기능을 인식하고 로드할 수 있도록 레지스트리 항목을 만듭니다.
이러한 단계를 모두 완료하도록 선택하거나 공유 추가 기능 형식의 .NET 프로젝트를 만들 수 있습니다. 그러면 .NET에서 COM 추가 기능 작성을 안내하는 확장성 마법사가 시작됩니다.

확장성 마법사는 IDTExtensibility2 인터페이스를 구현하는 Connect 클래스와 함께 Visual Basic .NET 클래스 라이브러리 프로젝트를 만듭니다. IDTExtensibility의 빈 구성원을 구현하는 골격 코드도 만들어집니다. 이 프로젝트에는 Extensibility 및 Office 어셈블리에 대한 참조가 있습니다. 프로젝트의 빌드 설정에는 COM Interop 등록이 선택되어 있습니다. 어셈블리 키(.snk) 파일이 생성되어 Assemblyinfo.vb의 AssemblyKeyfile 특성에서 참조됩니다.

마법사는 클래스 라이브러리 프로젝트와 함께 다른 컴퓨터에 COM 추가 기능을 배포하는 데 사용할 수 있는 설치 프로젝트를 만듭니다. 필요한 경우 이 프로젝트를 제거할 수도 있습니다.

단계별 예제

  1. Microsoft Visual Studio .NET의 파일 메뉴에서 새로 만들기를 누른 다음 프로젝트를 누릅니다.
  2. 새 프로젝트 대화 상자의 프로젝트 형식에서 기타 프로젝트를 확장하고 확장성 프로젝트를 선택한 다음 공유 추가 기능 템플릿을 선택합니다.
  3. 추가 기능의 이름으로 MyCOMAddin을 입력한 다음 확인을 누릅니다.
  4. 확장성 마법사가 나타나면 다음과 같이 하십시오.
    1. 1페이지에서 Visual Basic을 사용하여 추가 기능 만들기를 선택하고 다음을 누릅니다.
    2. 2페이지에서 다음 호스트 응용 프로그램을 선택하고 다음을 누릅니다.
      • Microsoft Word
      • Microsoft PowerPoint
      • Microsoft Outlook
      • Microsoft Excel
      • Microsoft Access
    3. 3페이지에서 해당 추가 기능에 대한 이름과 설명을 입력하고 다음을 누릅니다.

      참고 추가 기능의 이름과 설명은 Office 응용 프로그램의 COM 추가 기능 대화 상자에 나타납니다.

    4. 4페이지에서 사용할 수 있는 옵션을 모두 선택하고 다음을 누릅니다.
    5. 마침을 누릅니다.
  5. 다음 구성원을 Connect 클래스에 추가합니다.
    Dim WithEvents MyButton As CommandBarButton 
  6. Connect 클래스에서 IDTExtensibility2의 모든 구성원에 대해 다음과 같은 코드를 구현합니다.
        Public Sub OnBeginShutdown(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnBeginShutdown
            On Error Resume Next
            ' Notify the user you are shutting down, and delete the button.
            MsgBox("Our custom Add-in is unloading.")
            MyButton.Delete()
            MyButton = Nothing
    
        End Sub
    
        Public Sub OnAddInsUpdate(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnAddInsUpdate
            '
        End Sub
    
        Public Sub OnStartupComplete(ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnStartupComplete
    
            Dim oCommandBars As CommandBars
            Dim oStandardBar As CommandBar
    
            On Error Resume Next
            ' Set up a custom button on the "Standard" command bar.
            oCommandBars = applicationObject.CommandBars
            If oCommandBars Is Nothing Then
                ' Outlook has the CommandBars collection on the Explorer object.
                oCommandBars = applicationObject.ActiveExplorer.CommandBars
            End If
    
            oStandardBar = oCommandBars.Item("Standard")
            If oStandardBar Is Nothing Then
                ' Access names its main toolbar Database.
    
                oStandardBar = oCommandBars.Item("Database")
    
            End If
    
            ' In case the button was not deleted, use the exiting one.
            MyButton = oStandardBar.Controls.Item("My Custom Button")
            If MyButton Is Nothing Then
    
                MyButton = oStandardBar.Controls.Add(1)
                With MyButton
                    .Caption = "My Custom Button"
                    .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.
    
                    .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 clicks 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 show which application you started in.
            MsgBox("Started in " & applicationObject.Name & ".")
    
    
            oStandardBar = Nothing
            oCommandBars = Nothing
    
    
        End Sub
    
        Public Sub OnDisconnection(ByVal RemoveMode As Extensibility.ext_DisconnectMode, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnDisconnection
    
            On Error Resume Next
            If RemoveMode <> Extensibility.ext_DisconnectMode.ext_dm_HostShutdown Then _
               Call OnBeginShutdown(custom)
    
            applicationObject = Nothing
    
    
        End Sub
    
        Public Sub OnConnection(ByVal application As Object, ByVal connectMode As Extensibility.ext_ConnectMode, ByVal addInInst As Object, ByRef custom As System.Array) Implements Extensibility.IDTExtensibility2.OnConnection
    
    
            MsgBox("On Connection In MyAddin")
            applicationObject = application
            addInInstance = addInInst
    
    
            ' If you aren't in startup, manually call OnStartupComplete.
            If (connectMode <> Extensibility.ext_ConnectMode.ext_cm_Startup) Then _
               Call OnStartupComplete(custom)
    
        End Sub
    
    
        Private Sub MyButton_Click(ByVal Ctrl As Microsoft.Office.Core.CommandBarButton, ByRef CancelDefault As Boolean) Handles MyButton.Click
            MsgBox("Our CommandBar button was pressed!")
        End Sub
    					
  7. COM 추가 기능을 빌드하고 테스트합니다. 이렇게 하려면 다음 단계를 수행하십시오.
    1. 빌드 메뉴에서 MyCOMAddin 빌드를 누릅니다. COM 추가 기능을 빌드하면 .NET 클래스가 COM interop에 등록됩니다.
    2. 해당 추가 기능에 대해 호스트 응용 프로그램으로 선택한 Office 응용 프로그램(Microsoft Word 또는 Microsoft Excel) 중 하나를 시작합니다.
    3. 추가 기능을 시작하면 OnConnection 이벤트가 실행되고 메시지 상자가 나타납니다. 메시지 상자를 닫으면 OnStartupComplete 이벤트가 실행되고 두 번째 메시지 상자가 나타납니다. 메시지 상자를 닫습니다.
    4. 표준 도구 모음에 "My Custom Button" 캡션이 있는 새로운 사용자 지정 단추가 추가됩니다.
    5. My Custom Button을 누릅니다. 단추의 Click 이벤트가 추가 기능에 의해 처리되고 메시지 상자가 나타납니다. 메시지 상자를 닫습니다.
    6. Office 응용 프로그램을 종료합니다.
    7. 응용 프로그램을 종료하면 OnBeginShutDown 이벤트가 실행되고 메시지 상자가 나타납니다. 메시지 상자를 닫아 데모를 종료합니다.

참조

COM 추가 기능을 작성하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
190253 INFO: VB6 디자이너가 VB5에서 작동하지 않는다
Microsoft Internet Explorer용 웹 기반 솔루션 개발에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오.
http://msdn.microsoft.com/library/default.asp?url=/workshop/entry.asp(영문)

http://msdn2.microsoft.com/en-us/ie/default.aspx(영문)

http://support.microsoft.com/iep(영문)
(c) Microsoft Corporation 2001, All Rights Reserved. 기고: Ranjit R. Sawant, Microsoft Corporation.





Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 302896 - 마지막 검토: 2006년 12월 25일 월요일 - 수정: 11.1
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Office Outlook 2003
  • Microsoft Outlook 2002 Standard Edition
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft Office Word 2003
  • Microsoft Word 2002 Standard Edition
키워드:?
kbhowtomaster kbautomation KB302896

피드백 보내기

 

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