Delphi 2010中不存在单元中的IDeveloperConsoleMessageReceiver
接口MSHTML.pas
,但(可能)存在于更新版本中,因为它是最近的功能.
我想手动声明此接口,但仅限于它尚不存在.
如何测试是否声明了此接口?
像"假"代码:
{$IFNDEF "IDeveloperConsoleMessageReceiver"}
type
IDeveloperConsoleMessageReceiver = interface ...
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)
Ken*_*ssa 12
你在寻找什么
{$IF not DECLARED(IDeveloperConsoleMessageReceiver)}
IDeveloperConsoleMessageReceiver = interface ...
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)
更多细节可以在这里找到
编辑:只是为了澄清,它将测试符号是否在$ IF发生的范围内声明.因此,即使在当前项目中声明了符号,如果声明它的单元不在您测试它的单元的用途中,它也不会计为声明.
您可以使用编译器定义来测试预定义常量{$IF}
:
{$IFDEF CONDITIONALEXPRESSIONS}
{$IF MSHTMLMajorVersion < 4} // Implement interface
type
IDeveloperConsoleMessageReceiver = interface ...
{$IFEND}
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)
MSHTMLMajorVersion
是一个声明的常量MSHTML.PAS
,它定义是否声明了特定的接口:
const
// TypeLibrary Major and minor versions
MSHTMLMajorVersion = 4;
MSHTMLMinorVersion = 0;
Run Code Online (Sandbox Code Playgroud)
如果您的问题是如何测试编译时是否存在任何接口,那么除非您无法从常量派生它,否则可以强制编译器在未声明的情况下停止并显示错误:
type
IMyTest = IDeveloperConsoleMessageReceiver;
Run Code Online (Sandbox Code Playgroud)
这可能并不理想,具体取决于问题的范围.