我正试图摆脱Delphi编译器发出的一些提示(*)。浏览 ToolsAPI 我看到一个 IOTAToolsFilter 看起来可能会帮助我通过它的Notifier实现这一点,但我不知道如何调用它(通过什么xxxServices我可以访问过滤器)。
有谁能告诉我,我是否在正确的轨道上?谢谢!
(*)特别是,H2365关于被覆盖的方法与父母的情况不匹配。当你有大约500万行活动代码与Embarcadero的代码约定略有不同时,不太好。我们几个月来一直没有提示,我们有点想念。 : - )子>
答案 0 :(得分:4)
即使你可以为IOTAToolsFilter查询BorlandIDEServices,该界面也不会帮助你做你所要求的。该接口是作为向IDE添加其他构建工具(编译器等)的机制的一部分引入的(在IDE使用MSBuild之前)。它允许您编写一个自定义的“过滤器”来处理来自特定构建工具的输出,但它不允许您将过滤器应用于其中一个内置工具(如delphi编译器)。
在Delphi2010中Supports(BorlandIDEServices, IOTAToolsFilter, OTAToolsFilter)
调用失败的原因是,一旦将MSBuild支持添加到IDE,就会禁用向IDE添加构建工具的旧方法,并且不再支持BorlandIDEServices接口IOTAToolsFilter。
IOTAToolsFilter的声明应该在ToolsAPI.pas中被标记为已弃用(或者至少应该在源代码注释中提到它不再受支持)。
至于您希望过滤特定提示,我不知道通过ToolsAPI做到这一点的方法。似乎可以添加到IOTAMessageServices(能够枚举,过滤并可能更改IDE的消息视图中的消息)这是一个合理的事情。我会在QualityCentral中输入一个请求。
另外,请投票给QC#35774(http://qc.embarcadero.com/wc/qcmain.aspx?d=35774),好像已经实施了,你不需要使用ToolsAPI来做这类事情。
答案 1 :(得分: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中的错误未返回正确的接口。