我在通过字符串创建对象时碰到的问题,那个大虾知道帮看看哦
一个自定义的类
type
  TSampleClass=class(TPersistent)
  private  public
    i:integer;
    j:integer;
    function add:integer;
  end;function tsampleclass.add: integer;
begin
  result:=i+j;
end;
调用:
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterClasses([TSampleClass]);
end;procedure TForm1.Button4Click(Sender: TObject);
var
  lSampleClass,lSample:TSampleClass;
begin
  lSampleClass := TSampleClass(FindClass('TSampleClass'));
  lSample := TSampleClass(lSampleClass).Create;
  lSample.i:=10;
  lSample.j:=30;
  edit1.Text:=inttostr(lSample.add);
end;
在执行:  lSample := TSampleClass(lSampleClass).Create;出错:
Access violation at Address D9E9C3FF
这是哪里错啊,是我自己类建的哪里有问题吗

解决方案 »

  1.   

    调用的时候
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    //RegisterClasses([TSampleClass]);不需要
    end;
    procedure TForm1.Button4Click(Sender: TObject);
    var
      lSampleClass,lSample:TSampleClass;
    begin
      lSample := TSampleClass.Create;
      lSample.i:=10;
      lSample.j:=30;
      edit1.Text:=inttostr(lSample.add);
    end;
      

  2.   

    procedure TForm1.Button4Click(Sender: TObject);
    var
      lSampleClass,lSample:TSampleClass;
    begin
      lSample := TSampleClass.Create;
      lSample.i:=10;
      lSample.j:=30;
      edit1.Text:=inttostr(lSample.add);
      lSample.Free;//别忘了释放资源
    end;
      

  3.   

    var
      lSample:TSampleClass;
    begin
      lSample:= TSampleClass(FindClass('TSampleClass').create);
      with lSample do
      begin
        i:=10;
        j:=30;
      end;
      edit1.Text:=inttostr(lSample.add);
    end;
      

  4.   

    var
      lSampleClass : TClass;
      lSample:TSampleClass;
      button : TButton;
    begin
      lSampleClass := (FindClass('TSampleClass'));
      lSample := TSampleClass(lSampleClass.Create);
      lSample.i:=10;
      lSample.j:=30;
      edit1.Text:=inttostr(lSample.add);
      

  5.   

    多谢zjqyb(风清扬*任它溺水三千,我只取一瓢饮*) :)