3

我想通过ToolsAPI获取模块(帕斯卡单元)的结构信息。就像 IDE 的结构视图一样。

类、记录、接口、变量/常量等成员、参数等

是否已经有一种简单有效的方法来获取这些元数据?

4

2 回答 2

4

AFAIK 无法查询给定文件的特殊结构化信息。

您可以做的是访问结构窗格中的信息。这种方式要求文件是活动模块(可以通过 OTA 实现),输出取决于结构窗格设置(工具 | 选项... -> 环境选项 | 资源管理器),如果节点是字段,则程序或任何需要在图像索引上确定的内容,父...

此代码遍历结构窗格。

procedure StructureViewToSL(ASL: TStringList);

  procedure TreeToSL(ANode: IOTAStructureNode; ASL: TStringList; const APrefix: string);
  var
    I: Integer;
  begin
    ASL.Add(APrefix + ANode.Caption);
    for I := 0 to ANode.ChildCount - 1 do
      TreeToSL(ANode.Child[I], ASL, APrefix + '  ');
  end;

var
  StructureView: IOTAStructureView;
  StructureContext: IOTAStructureContext;
  Node: IOTAStructureNode;
  I: Integer;
begin
  StructureView := BorlandIDEServices as IOTAStructureView;
  StructureContext := StructureView.GetStructureContext;
  for I := 0 to StructureContext.RootNodeCount - 1 do
  begin
    Node := StructureContext.GetRootStructureNode(I);
    TreeToSL(Node, ASL, '');
  end;
end;
于 2010-06-19T09:44:11.980 回答
2

也许使用解析器不是那么坏的主意?

于 2010-06-19T13:11:47.863 回答