无法在Delphi XE5中为Variant变量分配字符串?

时间:2015-01-14 19:15:24

标签: delphi

我正在尝试将UnicodeString(或Widestring,尝试过两者)值分配给属性设置器中声明为Variant的类字段变量。我收到了一个错误:

EVariantBadVarTypeError - 'Invalid variant type'

interface uses条款中,我添加了System.Variants

这是我对Variant字段变量的声明:

TContainerClass = class(TObject)
strict private
...
type
  ...
  TInnerClass = class
  strict private
    ...
    FValue: Variant;
    function GetAsString: UnicodeString;
    ...
    procedure SetAsString(const Value: UnicodeString);
  public
    ...
    property AsString: UnicodeString read GetAsString write SetAsString;
    ...
  end;
  ...
end;

implementation部分,这是我的属性设置器:

procedure TContainerClass.TInnerClass.SetAsString(const AValue: UnicodeString);
begin
  FValue := AValue;
end;

以下是使用该属性的示例:

// Items is a TObjectList descendant
// each item in items is an instance of TInnerClass
TInnerClass(Items[Index]).AsString := StringList[Index]; 
// at runtime value is for ex. 'Dr.' - this assignment raises the above referenced exception

在单步执行代码时,所有对象都会被实例化。作业的双方似乎都是有效的。我走过的唯一一件事就是,当我评估TInnerClass(Items[Index])时,我看到了这一点:

(Unknown type: 39852, (nil,$3A83700), Variant array of Unknown, $1, $F, '')

我可能缺少一些简单的东西。

1 个答案:

答案 0 :(得分:1)

  

(未知类型:39852,(零,$ 3A83700),变体数组未知,$ 1,$ F,'')

看起来程序中的某些内容已损坏变体对象。一旦您能够识别并避免损坏,您的代码就应该开始工作了。

查找执行原始内存访问的代码,例如对Move的调用是常见的损坏源。同样使用陈旧的指针或引用。