0

我实际上是在 delphi 中使用 dwscript 并遇到以下问题:

我定义了两个类如下

TClassOne = class
  private
   FName : String;
 public
   property Name: String read FName write FName;
end;

TClassTwo = class
  private
    FName      : String;
    FClassOne  : TClassOne;
  public
    property Name: String read FName write FName;
    property ClassOne: TClassOne read FClassOne write FClassOne;
end;

我通过 ExposeRTTI 将两个类都暴露给 DWScript:

dwsUnitExternal.ExposeRTTI(TypeInfo(TClassOne), [eoExposeVirtual, eoNoFreeOnCleanup, eoExposePublic]);
dwsUnitExternal.ExposeRTTI(TypeInfo(TClassTwo), [eoExposeVirtual, eoNoFreeOnCleanup, eoExposePublic]);

这基本上是有效的,因为当我插入以下行时

var myClassTwo : TClassTwo = TClassTwo.Create;
myClassTwo.Name := 'test';

var myClassOne : TClassOne = TClassOne.Create;
myClassOne.Name := 'abc';

myClassTwo.ClassOne := myClassOne;
myClassTwo.ClassOne.Name := 'xyz';  // Comiler error

var myClassOne2 : TClassOne;
myClassOne2 := myClassTwo.ClassOne; // Compiler error
myClassOne2 := (myClassTwo.ClassOne as TClassOne); // Compiler error

对于 DWScript,前 5 行已正确编译,但是当我尝试在 ClassTwo (第 6 行)中访问 ClassOne 的属性时,编译器会抛出“没有预期的成员”。我知道这是由于 RTTI 功能有限,但我不知道如何解决这个问题。

有人知道如何在脚本中访问 myClassTwo.ClassOne.Name 吗?与方法相同,顺便说一句。

提前致谢!

PS:添加了 3 行以显示更多尝试 - 没有成功...

4

0 回答 0