2

我试图摆脱 Delphi 编译器发出的一些提示(*)。浏览ToolsAPI ,我看到一个IOTAToolsFilter,它看起来可以帮助我通过它的Notifier 完成此任务,但我不确定如何调用它(通过我可以访问过滤器的xxxServices)。

谁能告诉我我在这里是否走在正确的轨道上?谢谢!

(*) 特别是,H2365 关于与父级大小写不匹配的覆盖方法。当您有大约 500 万行活动代码且代码约定与 Embarcadero 的代码约定略有不同时,这不是很好。几个月来我们一直在毫无提示地工作,我们有点想念他们。:-)

4

2 回答 2

4

即使您可以在 BorlandIDEServices 中查询 IOTAToolsFilter,该界面也无法帮助您完成您所要求的工作。该接口是作为向 IDE(在 IDE 使用 MSBuild 之前)添加其他构建工具(编译器等)的机制的一部分而引入的。它允许您编写自定义“过滤器”来处理来自特定构建工具的输出,但它不允许您将过滤器应用于内置工具之一(如 delphi 编译器)。

Delphi2010调用失败的原因Supports(BorlandIDEServices, IOTAToolsFilter, OTAToolsFilter)是,一旦IDE添加MSBuild支持,IDE添加构建工具的旧方式被禁用,BorlandIDEServices接口不再支持IOTAToolsFilter。

IOTAToolsFilter 的声明可能应该在 ToolsAPI.pas 中被标记为 deprecated(或者至少应该在源代码注释中提到它不再受支持)。

至于您希望过滤特定提示,我不知道有一种方法可以通过 ToolsAPI 做到这一点。可以添加到 IOTAMessageServices 似乎是一件合理的事情(枚举、过滤和可能更改 IDE 消息视图中的消息的能力)。我会为此在 QualityCentral 中输入请求。

另外,请投票给 QC #35774 ( http://qc.embarcadero.com/wc/qcmain.aspx?d=35774 ),就好像已经实现了一样,您不需要为此类事情使用 ToolsAPI。

于 2010-06-11T18:47:58.770 回答
1

根据http://docwiki.embarcadero.com/RADStudio/en/Obtaining_Tools_API_Services应该可以使用 BorlandIDEServices 直接访问它,例如:

var
  OTAToolsFilter: IOTAToolsFilter;
begin    
if Supports(BorlandIDEServices, IOTAToolsFilter, OTAToolsFilter) then
  ShowMessage('supports IOTAToolsFilter')
else
  ShowMessage('IOTAToolsFilter NOT supported');
end;

但是,这不会在 Delphi 2010 中返回所需的接口(您将收到不支持的消息),因此文档中存在错误,或者 BorlandIDEServices 中的错误未返回正确的接口。

于 2010-06-08T13:49:45.380 回答