다음을 통해 공유


방법: Visual C++ 코드 모델을 사용하여 코드 조작(Visual C#)

Visual Studio 코드 모델을 사용하면 자동화 클라이언트에서는 프로젝트에서 코드 정의를 찾고 해당 코드 요소를 수정할 수 있습니다. Visual C++에서는 Visual C++ 관련 코드를 대상으로 하는 핵심 코드 모델에 대한 확장을 제공합니다.

예를 들어 Language 속성이 해당 코드 요소가 Visual C++ 코드 모델 개체 및 Kind = vsCMElementClass임을 나타내면 Visual Studio 코드 모델의 CodeClass2를 사용하거나 Visual C++ 코드 모델의 VCCodeClass를 사용하도록 선택할 수 있습니다.

다음 절차에서는 Visual C++와 관련된 코드 모델을 사용하여 코드를 검사하고 생성하는 방법을 보여 줍니다.

프로젝트의 첫 번째 파일에 주석을 추가하려면

  1. Visual C#에서 Visual Studio 추가 기능 프로젝트를 만듭니다.

  2. 프로젝트 메뉴에서 참조 추가를 클릭하고 .NET 탭을 클릭한 다음 Microsoft.VisualStudio.VCCodeModel을 선택하고 확인을 클릭합니다.

  3. Connect.cs 파일의 맨 위에 using Microsoft.VisualStudio.VCCodeModel;을 추가합니다.

  4. OnConnection 메서드의 코드를 다음 코드로 바꿉니다.

    // Add-in code.
    using Microsoft.VisualStudio.VCCodeModel;
    public void OnConnection(object application,
     Extensibility.ext_ConnectMode connectMode, object addInInst,
     ref System.Array custom)
    {
        _applicationObject = (DTE2)application;
        )addInInstance = (AddIn)addInInst;
        // Pass the applicationObject member variable to the code example.
        test((DTE2)_applicationObject); 
    }
    
    public void test( DTE2 dte ) 
    { 
        VCCodeModel vcCM = null; 
        VCCodeElement vcCodeElement = null; 
        vcCM = ( ( VCCodeModel )( dte.Solution.Item( 1 ).CodeModel ) ); 
        vcCodeElement = ( ( VCCodeElement )
    ( vcCM.CodeElements.Item(1))); 
        AddCommentAtStart( vcCodeElement ); 
        AddCommentAtEnd( vcCodeElement ); 
    } 
    
    public void AddCommentAtStart(
      Microsoft.VisualStudio.VCCodeModel.VCCodeElement vcCodeElement )
    {
        TextPoint textPoint = null;
        textPoint = vcCodeElement.get_StartPointOf(
          vsCMPart.vsCMPartWhole, 0 );
        textPoint.CreateEditPoint().Insert("/*This is a Start Comment*/");
    }
    
    public void AddCommentAtEnd( 
      Microsoft.VisualStudio.VCCodeModel.VCCodeElement vcCodeElement )
    {
        TextPoint textPoint = null;
        textPoint = vcCodeElement.get_EndPointOf( vsCMPart.vsCMPartWhole, 0  
          );
        textPoint.CreateEditPoint().Insert( "/*End Comment*/" );
    }
    
  5. 빌드 메뉴에서 솔루션 빌드를 클릭하여 추가 기능을 빌드합니다.

  6. Visual Studio IDE(통합 개발 환경)에서 Visual C++ 프로젝트를 엽니다.

  7. 도구 메뉴에서 추가 기능 관리자를 클릭한 다음 추가 기능 관리자 대화 상자에서 추가 기능을 선택합니다. 확인을 클릭하여 추가 기능을 실행합니다.

  8. 프로그래밍 방식으로 추가된 주석에 대해 프로젝트의 첫 번째 파일을 검사합니다.

Visual C++ 프로젝트에 새 파일을 추가하려면

  1. Visual C#에서 Visual Studio 추가 기능 프로젝트를 만듭니다.

  2. 프로젝트 메뉴에서 참조 추가를 클릭하고 .NET 탭을 클릭한 다음 Microsoft.VisualStudio.VCCodeModel을 선택하고 확인을 클릭합니다.

  3. Connect.cs 파일의 맨 위에 using Microsoft.VisualStudio.VCCodeModel;을 추가합니다.

  4. OnConnection 메서드의 코드를 다음 코드로 바꿉니다.

    //Add-in code.
    using Microsoft.VisualStudio.VCCodeModel;
    public void OnConnection(object application,
     Extensibility.ext_ConnectMode connectMode, object addInInst,
     ref System.Array custom)
    {
        _applicationObject = (DTE2)application;
        _addInInstance = (AddIn)addInInst;
        // Pass the applicationObject member variable to the code example.
        GetVCCodeElement((DTE2)_applicationObject); 
    }
    
    //  Shows how to get a VCCodeElement.
    public void GetVCCodeElement( DTE2 dte ) 
    {
        VCCodeModel vcCM = null; 
        VCCodeElement vcCodeElement = null; 
        vcCM = ( ( Microsoft.VisualStudio.VCCodeModel.VCCodeModel )(
          dte.Solution.Item( 1 ).CodeModel ) ); 
        vcCodeElement = ( (
          Microsoft.VisualStudio.VCCodeModel.VCCodeElement )( 
          vcCM.AddClass( "MyClass2", "MyClass2.h",0,null, null,
          EnvDTE.vsCMAccess.vsCMAccessDefault ) ) ); 
    }
    
  5. 빌드 메뉴에서 솔루션 빌드를 클릭하여 추가 기능을 빌드합니다.

  6. Visual Studio IDE에서 Visual C++ 프로젝트를 엽니다.

  7. 도구 메뉴에서 추가 기능 관리자를 클릭하고 추가 기능 관리자 대화 상자에서 추가 기능을 선택합니다. 확인을 클릭하여 추가 기능을 실행합니다.

    참고

    MyClass2.h가 이미 있으면 코드가 실패합니다.

file.h에 함수를 추가하려면

  1. Visual C#에서 Visual Studio 추가 기능 프로젝트를 만듭니다.

  2. 프로젝트 메뉴에서 참조 추가를 클릭하고 .NET 탭을 클릭한 다음 Microsoft.VisualStudio.VCCodeModel 및 System.Windows.Forms를 선택하고 확인을 클릭합니다.

  3. Connect.cs 파일의 맨 위에 다음과 같은 using 문을 추가합니다.

    using System.Windows.Forms;
    using Microsoft.VisualStudio.VCCodeModel;
    
  4. OnConnection 메서드의 코드를 다음 코드로 바꿉니다.

    // Add-in code.
    using Microsoft.VisualStudio.VCCodeModel;
    using System.Windows.Forms;
    public void OnConnection(object application,
     Extensibility.ext_ConnectMode connectMode, object addInInst,
     ref System.Array custom)
    {
        _applicationObject = (DTE2)application;
        _addInInstance = (AddIn)addInInst;
        // Pass the applicationObject member variable to the code example.
        DisplayName((DTE2)_applicationObject); 
    }
    
    // DisplayName
    // Shows the DisplayName of a function which includes the parameter 
    // names.
    public void DisplayName( DTE2 dte ) 
    { 
        VCCodeModel vcCM = null; 
        VCCodeElement vcCodeElement = null; 
        vcCM = ( ( Microsoft.VisualStudio.VCCodeModel.VCCodeModel )(
          dte.Solution.Item( 1 ).CodeModel ) ); 
          vcCodeElement = ( (     
            Microsoft.VisualStudio.VCCodeModel.VCCodeElement )
            ( vcCM.AddFunction( "MyFunction", "File.h",  
            vsCMFunction.vsCMFunctionFunction, "void",
            null, EnvDTE.vsCMAccess.vsCMAccessDefault ) ) ); 
        MessageBox.Show( vcCodeElement.DisplayName); 
    }
    
  5. 빌드 메뉴에서 솔루션 빌드를 클릭하여 추가 기능을 빌드합니다.

  6. Visual Studio IDE에서 Visual C++ 프로젝트를 열고 file.h를 추가합니다.

  7. 도구 메뉴에서 추가 기능 관리자를 클릭한 다음 추가 기능 관리자 대화 상자에서 추가 기능을 선택합니다. 확인을 클릭하여 추가 기능을 실행합니다.

  8. file.h에서 삽입된 코드를 검사합니다.

최상위 수준 코드 요소를 포함하는 파일을 표시하려면

  1. Visual C#에서 Visual Studio 추가 기능 프로젝트를 만듭니다.

  2. 프로젝트 메뉴에서 참조 추가를 클릭하고 .NET 탭을 클릭한 다음 Microsoft.VisualStudio.VCCodeModel 및 System.Windows.Forms를 선택하고 확인을 클릭합니다.

  3. Connect.cs 파일의 맨 위에 다음과 같은 using 문을 추가합니다.

    using System.Windows.Forms;
    using Microsoft.VisualStudio.VCCodeModel;
    
  4. OnConnection 메서드의 코드를 다음 코드로 바꿉니다.

    // Add-in code.
    using Microsoft.VisualStudio.VCCodeModel;
    using System.Windows.Forms;
    public void OnConnection(object application,
     Extensibility.ext_ConnectMode connectMode, object addInInst,
     ref System.Array custom)
    {
        _applicationObject = (DTE2)application;
        _addInInstance = (AddIn)addInInst;
        // Pass the applicationObject member variable to the code example.
        DisplayLocation((DTE2)_applicationObject); 
    }
    
    public void DisplayLocation( DTE2 dte ) 
    {
        VCCodeModel vcCM = null; 
        VCCodeElement vcCodeElement = null; 
        vcCM = ( ( Microsoft.VisualStudio.VCCodeModel.VCCodeModel )(
          dte.Solution.Item( 1 ).CodeModel ) ); 
        foreach ( Microsoft.VisualStudio.VCCodeModel.VCCodeElement temp
          in vcCM.CodeElements ) 
        {
            vcCodeElement = temp;
            MessageBox.Show( vcCodeElement.Name + " is declared in " 
              + vcCodeElement.get_Location(vsCMWhere.vsCMWhereDefault)); 
        }
    }
    
  5. 빌드 메뉴에서 솔루션 빌드를 클릭하여 추가 기능을 빌드합니다.

  6. Visual Studio IDE에서 Visual C++ 프로젝트를 엽니다.

  7. 도구 메뉴에서 추가 기능 관리자를 클릭한 다음 추가 기능 관리자 대화 상자에서 추가 기능을 선택합니다. 확인을 클릭하여 추가 기능을 실행합니다.

  8. 최상위 수준 코드 요소를 포함하는 파일 이름이 메시지 상자에 표시됩니다.

최상위 수준 코드 요소 항목을 모두 표시하려면

  1. Visual C#에서 Visual Studio 추가 기능 프로젝트를 만듭니다.

  2. 프로젝트 메뉴에서 참조 추가를 클릭하고 .NET 탭을 클릭한 다음 Microsoft.VisualStudio.VCCodeModel 및 System.Windows.Forms를 선택하고 확인을 클릭합니다.

  3. Connect.cs 파일의 맨 위에 다음과 같은 using 문을 추가합니다.

    using System.Windows.Forms;
    using Microsoft.VisualStudio.VCCodeModel;
    
  4. OnConnection 메서드의 코드를 다음 코드로 바꿉니다.

    // Add-in code.
    using Microsoft.VisualStudio.VCCodeModel;
    using System.Windows.Forms;
    public void OnConnection(object application,
     Extensibility.ext_ConnectMode connectMode, object addInInst,
     ref System.Array custom)
    {
        _applicationObject = (DTE2)application;
        _addInInstance = (AddIn)addInInst;
        // Pass the applicationObject member variable to the code example.
        FindItem((DTE2)_applicationObject); 
    }
    
    public void FindItem( DTE2 dte ) 
    {
        VCCodeModel vcCM = null; 
        VCCodeElements vcCodeElements = null; 
        vcCM = ( ( Microsoft.VisualStudio.VCCodeModel.VCCodeModel )(
          dte.Solution.Item( 1 ).CodeModel ) ); 
        vcCodeElements =
          ( ( Microsoft.VisualStudio.VCCodeModel.VCCodeElements )
          ( vcCM.CodeElements ) ); 
        int i = 0; 
        for ( i=1; i<=vcCodeElements.Count; i++ ) 
        {
            MessageBox.Show( vcCodeElements.Item( i ).Name); 
        }
    }
    
  5. 빌드 메뉴에서 솔루션 빌드를 클릭하여 추가 기능을 빌드합니다.

  6. Visual Studio IDE에서 Visual C++ 프로젝트를 엽니다.

  7. 도구 메뉴에서 추가 기능 관리자를 클릭한 다음 추가 기능 관리자 대화 상자에서 추가 기능을 선택합니다. 확인을 클릭하여 추가 기능을 실행합니다.

    최상위 수준 코드 요소 이름이 메시지 상자에 표시됩니다.

참고 항목

작업

방법: Visual C++ 코드 모델을 사용하여 코드 조작(Visual Basic)

개념

Visual C++ 코드 모델

코드 모델을 사용하여 코드 검색(Visual Basic)

코드 모델을 사용하여 코드 검색(Visual C#)