IDeveloperConsoleMessageReceiver
单元中的MSHTML.pas
接口在Delphi 2010中不存在,但(可能)存在于更新版本中,因为它是最近的功能。
我想手动声明此界面,但前提是它尚未存在。
如何测试是否声明了此接口?
像#"假的"代码:
{$IFNDEF "IDeveloperConsoleMessageReceiver"}
type
IDeveloperConsoleMessageReceiver = interface ...
{$ENDIF}
答案 0 :(得分:12)
您正在寻找的是
{$IF not DECLARED(IDeveloperConsoleMessageReceiver)}
IDeveloperConsoleMessageReceiver = interface ...
{$ENDIF}
可以找到更多详细信息here
编辑:只是为了澄清,它将测试符号是否在$ IF发生的范围内声明。因此,即使在当前项目中声明了符号,如果声明它的单位不在您测试它的单位的用途中,它也不会被声明为已声明。
答案 1 :(得分:5)
您可以使用{$IF}
编译器定义来测试predefined constants:
{$IFDEF CONDITIONALEXPRESSIONS}
{$IF MSHTMLMajorVersion < 4} // Implement interface
type
IDeveloperConsoleMessageReceiver = interface ...
{$IFEND}
{$ENDIF}
MSHTMLMajorVersion
是MSHTML.PAS
中声明的常量,它定义是否声明特定接口:
const
// TypeLibrary Major and minor versions
MSHTMLMajorVersion = 4;
MSHTMLMinorVersion = 0;
如果您的问题是如何测试编译时是否存在任何接口,那么除非您无法从常量派生它,否则可以强制编译器在未声明的情况下因错误而停止:
type
IMyTest = IDeveloperConsoleMessageReceiver;
这可能并不理想,具体取决于问题的范围。