创建了一个类,并为其设计了Constructor与destroy方法,在执行Destroy方法中跟踪没一行代码没有报错,在Destroy方法执行完闭以后,报错'adStract error',我的Destroy方法是使用override的啊,请问这是怎么会事情啊?

解决方案 »

  1.   

    写错了,请见下面!  创建了一个类,并为其设计了Constructor与destroy方法,在执行Destroy方法中跟踪每一行代码,没有一行报错,在Destroy方法执行完毕以后,报错'adStract error',我的Destroy方法是使用override的啊,请问这是怎么会事情啊?
      

  2.   

    我的类是这样的,创建一个带有tabsheet,wabBrowser,等的一个类,来显示多页面的浏览器.
    type
      TView=class 
      public
        Constructor Creat(AOwner:Tcomponent;Aparent:TPageControl;Var ppDisp:IDispatch);
        Destructor Destroy();Override; 
      private
        //要创建的几个组件
        myTab:TTabSheet;
        myStatusBar:TStatusBar;
        myWebBrowser:TWebBrowser;
        //要引用的几个组件
        myPageControl:TPageControl;
        myComponent:Tcomponent
       ......
    end;
    在构造函数中有:
    Constructor Tview.Creat(AOwner:Tcomponent;Aparent:TPageControl;Var ppDisp:IDispatch);
    begin
      //赋值
      self.myComponent:=AOwner;
      self.myPageControl:=Aparent;
      //创建
      myTab:= TTabSheet.Create(AOwner);
      myTab.PageControl := AParent;
      myStatusBar:=TStatusBar.Create(mytab);
      myWebBrowser:=TWebBrowser.Create(mytab);
      //显示网页
      ppDisp:=mywebBrowser.Application;
      mywebBrowser.ParentWindow:=mytab.Handle;
      ..............
    end;
    //析够函数有
    Destructor TView.Destroy;
    begin
      mytab.free;
    end;
    现在我的代码都可以通过,运行也正常,但是在释放一个对象的时候
    我调用self.free;以后就报错误'abstract error',是不是我引用对象的方法有错误呢?
    请各位高手指教!
      

  3.   

    我跟踪了,在释放的时候是在执行完mytab.free以后,才报的错,这是怎么回事情呢?
      

  4.   

    Destructor TView.Destroy;
    begin
      myWebBrowser.free;
      myStatusBar.free;
      myPageControl.free;
      myComponent.free;
      mytab.free;
      inherited;
    end;
    试一下上面代码看行不行!
      

  5.   

    奇怪了,我把稀够函数架空,即如下所示:
    Destructor TView.Destroy;
    begin
    end;
    我在调用self.freee;时,第一次调用没有任何反应,正常,
    第二次调用就报错:
    'access violation at adress 0043899 in moudle project1.exe read of address 000070',
    看来好象是使用了不存在的对象,但是我的稀够函数是空的啊,应该说
    即使调用n次稀够函数,也不应该有反应报错啊,这是怎么会事情呢?
      

  6.   

    在Destroy函数里只加一个inherited;或不覆盖Destroy函数试试
      

  7.   

    在Destroy里是要inherited 的!Destructor TView.Destroy;
    begin
      mytab.free;
      inherited;
    end;你这个类是直接继承Object了,Object里有很多adStract方法的.
      

  8.   

    应该不是inherited的问题,TObject的destory方法是空的,没有代码。我觉得是你引用或者创建的组件有问题建议把你要创建和引用的组件屏蔽,然后一个个打开,看是否报错。
      

  9.   

    恩,找出问题来了,我在webbrowser上放了一个,用来关闭当前网页的TButton
    myClose:Tbutton;
    myClose:=TButton.Create(mytab);
    myClose.Parent:=myWebBrowser;myClose.onclick的代码是
    self.free;这样点击myclose后就包错,如果是用TspeedButton
    myClose:TspeedButton;
    myClose:=TSpeedButton.Create(mytab);
    myClose.Parent:=myWebBrowser;这样点击myclose后就成功释放了,但问题是我的TspeedButton在webBrowser上显示不出来的,
    我是将 ppDisp:=mywebBrowser.Application;屏蔽后才看到我的speedButton的,点击后可以成功释放的(这时候微软的浏览器会单出代替我的网业内容,我的新tabsheet上才可以看到speedButton).
    如果不屏蔽这句,就只显示了网页,在webBrowser上看不到speedButton
    有什么方法可以解决这种奇怪的现象呢?请赐教啊!