Delphi GetClass

Jor*_*sov 1 delphi class delphi-7

我的问题是如何访问另一个单元中的类?举个例子:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Classes,
  System,
  StrUtils,
  Math,
  TypInfo,
  Data in 'Data.pas';

var
  Str, name, value                      : string;
  List, tmpList                         : TStringList;
  i                                     : Integer;
  Obj                                   : TObject;
  CRef                                  : TPersistentClass;
  d                                     : TData;
begin
  d := TData(GetClass('Data.TData').Create);
  Writeln(Format('%s', [d.Name]));
  Readln;
  Readln;
end.
Run Code Online (Sandbox Code Playgroud)

和数据单位:

unit Data;

interface
 uses
  SysUtils,
  Classes;
type
  TData = class(TObject)
    FName : string;
  published
    property Name : string read FName write FName;
  end;
type
  TIn = class(TObject)
    FName : string;
  published
    property Name : string read FName write FName;
  end;
implementation

end.
Run Code Online (Sandbox Code Playgroud)

问题是GetClass方法总是返回nil.我知道有这样的问题,但他们没有帮助我.

提前致谢!

Mar*_*rco 5

鉴于d被定义为TData,你不能简单地使用d := TData.Create()吗?

无论如何,如果你想从它的名字创建类,你必须在使用之前(看看这个链接)调用RegisterClass,GetClass或者那个类将无法识别,你得到一个nil.


Vil*_*nde 5

如果您使用的是后来的Delphi版本之一,则可以使用RTTI单元.

uses RTTI;
..
  var
    R : TRttiContext;
  begin
    R.FindType('Data.TData')
...
Run Code Online (Sandbox Code Playgroud)

在您的示例中,TIn不是内部类,但内部类也可以像这样访问:

R.FindType('Data.TData.TIn')
Run Code Online (Sandbox Code Playgroud)