如何:使用 Visual C++ 代码模型操作代码 (Visual Basic)

在 Visual Studio 2013 中,弃用外接程序。 我们建议您将外接程序升级到 VSPackage 扩展。 有关如何升级的更多信息,请参阅 常见问题:将外接程序转换为 VSPackage 扩展

Visual Studio 代码模型为自动化客户端提供了在项目中查找代码定义和修改这些代码元素的能力。 Visual C++ 提供了核心代码模型的一个扩展,专门用于特定于 Visual C++ 的代码。

例如,如果 Language 属性指示给定的代码元素是 Visual C++ 代码模型对象,并且 Kind = vsCMElementClass,则可以选择使用来自 Visual Studio 代码模型的 CodeClass2 或来自 Visual C++ 代码模型的 VCCodeClass

以下过程演示如何通过使用特定于 Visual C++ 的代码模型检查和生成代码。

将注释添加到项目中的第一个文件

  1. 在 Visual Basic 中创建 Visual Studio 外接程序项目。

  2. 在**“项目”菜单上,单击“添加引用”,然后单击“.NET”选项卡,选择 Microsoft.VisualStudio.VCCodeModel,然后单击“确定”**。

  3. 将 Imports Microsoft.VisualStudio.VCCodeModel 添加到 Connect.vb 文件顶部。

  4. 将 OnConnection 方法中的代码替换为以下代码:

    Imports Microsoft.VisualStudio.VCCodeModel
    Public Sub OnConnection(ByVal application As Object, ByVal  _
      connectMode As ext_ConnectMode, ByVal addInInst As Object, _
      ByRef custom As Array) Implements IDTExtensibility2.OnConnection
        _applicationObject = CType(application, DTE2)
        _addInInstance = CType(addInInst, AddIn)
        test(_applicationObject)
    End Sub
    
    Sub test(ByVal dte As DTE2)
        Dim vcCM As VCCodeModel
        Dim vcCodeElement As VCCodeElement
        vcCM = CType(dte.Solution.Item(1).CodeModel, VCCodeModel)
        vcCodeElement = CType(vcCM.CodeElements.Item(1), _
          VCCodeElement)
        AddCommentAtStart(vcCodeElement)
        AddCommentAtEnd(vcCodeElement)
    End Sub
    
    ' Project Property
    ' StartPointOf Property
    ' Adds a comment before the VCCodeElement declaration.
    Sub AddCommentAtStart(ByVal vcCodeElement As VCCodeElement)
        Dim textPoint As TextPoint
        textPoint = vcCodeElement.StartPointOf(vsCMPart.vsCMPartWhole)
        textPoint.CreateEditPoint().Insert("/*This is a Start_ Comment*/")
    End Sub
    
    Sub AddCommentAtEnd(ByVal vcCodeElement As VCCodeElement)
        Dim textPoint As TextPoint
        textPoint = vcCodeElement.EndPointOf(vsCMPart.vsCMPartWhole)
        textPoint.CreateEditPoint().Insert("/*End Comment*/")
    End Sub
    
  5. 若要生成外接程序,请单击**“生成”菜单上的“生成解决方案”**。

  6. 打开 Visual Studio 集成开发环境 (IDE) 中的一个 Visual C++ 项目。

  7. 在**“工具”菜单上,单击“外接程序管理器”,并从“外接程序管理器”对话框中选择您的外接程序。 单击“确定”**以运行外接程序。

  8. 检查项目中的第一个文件,查看以编程方式添加的注释。

将新的文件添加到 Visual C++ 项目中

  1. 在 Visual Basic 中创建 Visual Studio 外接程序项目。

  2. 在**“项目”菜单上,单击“添加引用”,然后单击“.NET”选项卡,选择 Microsoft.VisualStudio.VCCodeModel,然后单击“确定”**。

  3. 将 Imports Microsoft.VisualStudio.VCCodeModel 添加到 Connect.vb 文件顶部。

  4. 将 OnConnection 方法中的代码替换为以下代码:

    Imports Microsoft.VisualStudio.VCCodeModel
    Public Sub OnConnection(ByVal application As Object, ByVal _
      connectMode As ext_ConnectMode, ByVal addInInst As Object,  _
      ByRef custom As Array) Implements IDTExtensibility2.OnConnection
        _applicationObject = CType(application, DTE2)
        _addInInstance = CType(addInInst, AddIn)
        GetVCCodeElement(_applicationObject)
    End Sub
    
    ' Shows how to get a VCCodeElement.
    Sub GetVCCodeElement(ByVal dte As DTE2)
        Dim vcCM As VCCodeModel
        Dim vcCodeElement As VCCodeElement
        vcCM = CType(dte.Solution.Item(1).CodeModel, VCCodeModel)
        vcCodeElement = CType(vcCM.AddClass("MyClass2", "MyClass2.h"), _
          VCCodeElement)
    End Sub
    
  5. 若要生成外接程序,请单击**“生成”菜单上的“生成解决方案”**。

  6. 在 Visual Studio IDE 中打开一个 Visual C++ 项目。

  7. 在**“工具”菜单上,单击“外接程序管理器”,并从“外接程序管理器”对话框中选择您的外接程序。 单击“确定”**以运行外接程序。

    备注

    如果 MyClass2.h 已存在,则代码运行失败。

将函数添加到 file.h

  1. 在 Visual Basic 中创建 Visual Studio 外接程序项目。

  2. 在**“项目”菜单上,单击“添加引用”,然后单击“.NET”选项卡,选择 Microsoft.VisualStudio.VCCodeModel,然后单击“确定”**。

  3. 将 Imports Microsoft.VisualStudio.VCCodeModel 添加到 Connect.vb 文件顶部。

  4. 将 OnConnection 方法中的代码替换为以下代码:

    Imports Microsoft.VisualStudio.VCCodeModel
    Public Sub OnConnection(ByVal application As Object, ByVal _
      connectMode As ext_ConnectMode, ByVal addInInst As Object, _
      ByRef custom As Array) Implements IDTExtensibility2.OnConnection
        _applicationObject = CType(application, DTE2)
        _addInInstance = CType(addInInst, AddIn)
        DisplayName(_applicationObject)
    End Sub
    
    ' DisplayName
    ' Shows the DisplayName of a function which includes the parameter 
    ' names.
    Sub DisplayName(ByVal dte As DTE2)
        Dim vcCM As VCCodeModel
        Dim vcCodeElement As VCCodeElement
        vcCM = CType(dte.Solution.Item(1).CodeModel, VCCodeModel)
        vcCodeElement = CType(vcCM.AddFunction("MyFunction", "File.h", _
          vsCMFunction.vsCMFunctionFunction, "void"), VCCodeElement)
        MsgBox(vcCodeElement.DisplayName)
    End Sub
    
  5. 若要生成外接程序,请单击**“生成”菜单上的“生成解决方案”**。

  6. 在 Visual Studio IDE 中打开一个 Visual C++ 项目并在其中添加一个 file.h。

  7. 在**“工具”菜单上,单击“外接程序管理器”,然后从“外接程序管理器”对话框中选择您的外接程序。 单击“确定”**以运行外接程序。

  8. 检查 file.h 中的插入代码。

显示包含顶级代码元素的文件

  1. 在 Visual Basic 中创建 Visual Studio 外接程序项目。

  2. 在**“项目”菜单上,单击“添加引用”,然后单击“.NET”选项卡,选择 Microsoft.VisualStudio.VCCodeModel,然后单击“确定”**。

  3. 将 Imports Microsoft.VisualStudio.VCCodeModel 添加到 Connect.vb 文件顶部。

  4. 将 OnConnection 方法中的代码替换为以下代码:

    Imports Microsoft.VisualStudio.VCCodeModel
    Public Sub OnConnection(ByVal application As Object, ByVal _
      connectMode As ext_ConnectMode, ByVal addInInst As Object, _
      ByRef custom As Array) Implements IDTExtensibility2.OnConnection
        _applicationObject = CType(application, DTE2)
        _addInInstance = CType(addInInst, AddIn)
        DisplayLocation(_applicationObject)
    End Sub
    
    Sub DisplayLocation(ByVal dte As DTE2)
        Dim vcCM As VCCodeModel
        Dim vcCodeElement As VCCodeElement
        vcCM = CType(dte.Solution.Item(1).CodeModel, VCCodeModel)
        For Each vcCodeElement In vcCM.CodeElements
            MsgBox(vcCodeElement.Name + " is declared in " _
              & vcCodeElement.Location)
        Next
    End Sub
    
  5. 若要生成外接程序,请单击**“生成”菜单上的“生成解决方案”**。

  6. 在 Visual Studio IDE 中打开一个 Visual C++ 项目。

  7. 在**“工具”菜单上,单击“外接程序管理器”,然后从“外接程序管理器”对话框中选择您的外接程序。 单击“确定”**以运行外接程序。

    消息框显示包含顶级代码元素的文件名。

显示所有的顶级代码元素项

  1. 在 Visual Basic 中创建 Visual Studio 外接程序项目。

  2. 在**“项目”菜单上,单击“添加引用”,然后单击“.NET”选项卡,选择 Microsoft.VisualStudio.VCCodeModel,然后单击“确定”**。

  3. 将 Imports Microsoft.VisualStudio.VCCodeModel 添加到 Connect.vb 文件顶部。

  4. 将 OnConnection 方法中的代码替换为以下代码:

    Imports Microsoft.VisualStudio.VCCodeModel
    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
    
        _applicationObject = CType(application, DTE2)
        _addInInstance = CType(addInInst, AddIn)
        FindItem(_applicationObject)
    End Sub
    
    Sub FindItem(ByVal dte As DTE2)
        Dim vcCM As VCCodeModel
        Dim vcCodeElements As VCCodeElements
        vcCM = CType(dte.Solution.Item(1).CodeModel, VCCodeModel)
        vcCodeElements = CType(vcCM.CodeElements, VCCodeElements)
        Dim i As Integer
        For i = 1 To vcCodeElements.Count
            MsgBox(vcCodeElements.Item(i).Name)
        Next
    End Sub
    
  5. 若要生成外接程序,请单击**“生成”菜单上的“生成解决方案”**。

  6. 在 Visual Studio IDE 中打开一个 Visual C++ 项目。

  7. 在**“工具”菜单上,单击“外接程序管理器”,然后从“外接程序管理器”对话框中选择您的外接程序。 单击“确定”**以运行外接程序。

    消息框显示顶级代码元素名称。

请参见

概念

Visual C++ 代码模型

使用代码模型查找代码 (Visual Basic)

使用代码模型查找代码 (Visual C#)