vspackage开发,如何获取文件中或class中的代码元素

Vspackage development, how to get code elements in a file or in a class

我可以使用 codeModel 将代码添加到文件中。

现在我想将变量之类的代码元素添加到指定的class。

所以我首先要做的就是获取我要修改的class。 以下是我的代码:

IVsProject project = YHMExtensionHelper.GetSelectedProject();
int found;
uint itemId;
VSDOCUMENTPRIORITY[] pdwPriority = new VSDOCUMENTPRIORITY[1];
project.IsDocumentInProject("TEST.h", out found, pdwPriority, out itemId);
if (found == 0 || itemId == 0)
    return;
Microsoft.VisualStudio.OLE.Interop.IServiceProvider oleSp = null;
project.GetItemContext(itemId, out oleSp);
if (oleSp == null)
   return;
ServiceProvider sp = new ServiceProvider(oleSp);
EnvDTE.ProjectItem item = sp.GetService(typeof(EnvDTE.ProjectItem)) as EnvDTE.ProjectItem;
var codeModel = item.FileCodeModel;
var eles = codeModel.CodeElements;
for (int i = 0; i < eles.Count; i++)
{
    var singleItem = eles.Item(i);
    var str = singleItem.Name;
}

但这不起作用,我可以得到eles.Count,我无法通过eles.Item(i)得到任何物品。

在TEST.h中有一个简单的c++ class。

请告诉我怎么做。

问题已解决,我可以使用枚举元素中的所有代码元素。

foreach (CodeElement element in eles)
{
   if(element.Kind == vsCMElement.vsCMElementClass)
   {
      CodeClass cl = element as CodeClass;
      ...
   }
   ...
}