GetClass与RegisterClass的应用一例

这是转来的一篇文章,我自己在项目中也使用到了类似于根据类名创建类实例并调用相应函数的功能。具体代码我会在今后发布出来。

利用GetClass与RegisterClass可以实现根据字符串来实例化具体的子类,这对于某些需要动态配置程序的场合是很有用的。其他的应用如子窗体切换,算法替换等都能得到应用。

unit Example1;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例interface
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例uses
[Delphi] <wbr>GetClass与RegisterClass的应用一例  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
[Delphi] <wbr>GetClass与RegisterClass的应用一例  Dialogs, StdCtrls;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
type

[Delphi] <wbr>GetClass与RegisterClass的应用一例  TForm1 
= class(TForm)
[Delphi] <wbr>GetClass与RegisterClass的应用一例    Button1: TButton;
[Delphi] <wbr>GetClass与RegisterClass的应用一例    
procedure
 Button1Click(Sender: TObject);
[Delphi] <wbr>GetClass与RegisterClass的应用一例  private
[Delphi] <wbr>GetClass与RegisterClass的应用一例  public
[Delphi] <wbr>GetClass与RegisterClass的应用一例  
end
;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例  ILog 
=
 interface(IUnknown)
[Delphi] <wbr>GetClass与RegisterClass的应用一例    [
'{A65044FC-644C-482A-BBFF-50A618835FC6}'
]
[Delphi] <wbr>GetClass与RegisterClass的应用一例    
procedure
 WriteMessage;
[Delphi] <wbr>GetClass与RegisterClass的应用一例  
end
;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例  TLog 
=
 class(TInterfacedPersistent, ILog)
[Delphi] <wbr>GetClass与RegisterClass的应用一例  public
[Delphi] <wbr>GetClass与RegisterClass的应用一例    class 
function
 CreateInstance(Name: string): TLog; overload;
[Delphi] <wbr>GetClass与RegisterClass的应用一例    
procedure
 WriteMessage; virtual; abstract;
[Delphi] <wbr>GetClass与RegisterClass的应用一例  end
;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例  TTextLog 
=
 class(TLog)
[Delphi] <wbr>GetClass与RegisterClass的应用一例  public
[Delphi] <wbr>GetClass与RegisterClass的应用一例    
procedure
 WriteMessage; override;
[Delphi] <wbr>GetClass与RegisterClass的应用一例  
end
;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例  TXMLLog 
=
 class(TLog)
[Delphi] <wbr>GetClass与RegisterClass的应用一例  public
[Delphi] <wbr>GetClass与RegisterClass的应用一例    
procedure
 WriteMessage; override;
[Delphi] <wbr>GetClass与RegisterClass的应用一例  
end
;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例  TNullLog 
=
 class(TLog)
[Delphi] <wbr>GetClass与RegisterClass的应用一例  public
[Delphi] <wbr>GetClass与RegisterClass的应用一例    
procedure
 WriteMessage; override;
[Delphi] <wbr>GetClass与RegisterClass的应用一例  
end
;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
var

[Delphi] <wbr>GetClass与RegisterClass的应用一例  Form1: TForm1;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例implementation
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
{$R *.dfm}
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
procedure TForm1.Button1Click(Sender: TObject);
[Delphi] <wbr>GetClass与RegisterClass的应用一例
var

[Delphi] <wbr>GetClass与RegisterClass的应用一例  Log: TLog;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
begin
[Delphi] <wbr>GetClass与RegisterClass的应用一例  
{ 实际应用中可以从配置中读取字符串来决定实例化具体的子类 }
[Delphi] <wbr>GetClass与RegisterClass的应用一例  Log :
= TLog.CreateInstance('TXMLLog');
[Delphi] <wbr>GetClass与RegisterClass的应用一例  
if Assigned(Log) then

[Delphi] <wbr>GetClass与RegisterClass的应用一例  
begin
[Delphi] <wbr>GetClass与RegisterClass的应用一例    Log.WriteMessage;
[Delphi] <wbr>GetClass与RegisterClass的应用一例    Log.Free;
[Delphi] <wbr>GetClass与RegisterClass的应用一例  
end;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
end
;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例class function
 TLog.CreateInstance(Name: string): TLog;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
var

[Delphi] <wbr>GetClass与RegisterClass的应用一例  AClass: TPersistentClass;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
begin
[Delphi] <wbr>GetClass与RegisterClass的应用一例  Result :
= nil;
[Delphi] <wbr>GetClass与RegisterClass的应用一例  AClass :
=
 GetClass(Name);
[Delphi] <wbr>GetClass与RegisterClass的应用一例  
if Assigned(AClass) then

[Delphi] <wbr>GetClass与RegisterClass的应用一例  
begin
[Delphi] <wbr>GetClass与RegisterClass的应用一例    Result :
= AClass.NewInstance as TLog;
[Delphi] <wbr>GetClass与RegisterClass的应用一例    Result.Create;
[Delphi] <wbr>GetClass与RegisterClass的应用一例  
end

[Delphi] <wbr>GetClass与RegisterClass的应用一例  
else
[Delphi] <wbr>GetClass与RegisterClass的应用一例    
{ error handle }
[Delphi] <wbr>GetClass与RegisterClass的应用一例
end;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
{ TTextLog }

[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
procedure TTextLog.WriteMessage;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
begin

[Delphi] <wbr>GetClass与RegisterClass的应用一例  
//写入到文本文件
[Delphi] <wbr>GetClass与RegisterClass的应用一例
end
;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
{ TXMLLog }

[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
procedure TXMLLog.WriteMessage;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
begin

[Delphi] <wbr>GetClass与RegisterClass的应用一例  
//写入到XML文件
[Delphi] <wbr>GetClass与RegisterClass的应用一例
end
;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
{ TNullLog }

[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
procedure TNullLog.WriteMessage;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
begin

[Delphi] <wbr>GetClass与RegisterClass的应用一例  
{ nothing need to do }
[Delphi] <wbr>GetClass与RegisterClass的应用一例
end;
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例initialization
[Delphi] <wbr>GetClass与RegisterClass的应用一例  RegisterClass(TTextLog);
[Delphi] <wbr>GetClass与RegisterClass的应用一例  RegisterClass(TXMLLog);
[Delphi] <wbr>GetClass与RegisterClass的应用一例  RegisterClass(TNullLog);
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例finalization
[Delphi] <wbr>GetClass与RegisterClass的应用一例  UnRegisterClass(TTextLog);
[Delphi] <wbr>GetClass与RegisterClass的应用一例  UnRegisterClass(TXMLLog);
[Delphi] <wbr>GetClass与RegisterClass的应用一例  UnRegisterClass(TNullLog);
[Delphi] <wbr>GetClass与RegisterClass的应用一例
[Delphi] <wbr>GetClass与RegisterClass的应用一例
end.

posted @ 2011-04-23 15:03  gxch  阅读(985)  评论(1编辑  收藏  举报