Delphi:创建窗口时出现GetDynaMethod错误
来源:优易学  2011-7-3 21:06:29   【优易学:中国教育考试门户网】   资料下载   IT书店
  某个子窗口不是通过create(aowner)创建,而是通过另一个公共方法
  procedure TFrm_EmpSelect.SelectEmp(FList:Tlist);
  begin
  List:=Flist;
  with TFrm_EmpSelect.Create(self) do
  begin
  try
  Showmodal;
  finally
  Free;
  end;
  end;
  end;
  来调用,主要是传递了一个参数FList。
  但是出现了错误,跟踪后发现是调用TCustomForm.create -> ...-> TComponent.Create 时在函数GetDynaMethod的下面这段发生错误
  @@haveVMT:
  MOV EDI,[EBX].vmtDynamicTable ;EDI是DMT的入口
  当时以为是否selectEmp函数不是类(static)函数的关系,于是改成类函数,编译通不过,修改了一下,通过了,运行后就正常了。
  但是我又发现另外一个单元Login.pas里面的login函数也是同样用法,也不是类函数(为什么不是构造函数,又不是类函数,但能够不实例化就调用, 这个问题还有待研究)。 可见改成类函数不是问题解决的关键。 回想到改成类函数时编译错误发生在这行:
  with TFrm_EmpSelect.Create(self) do
  这里self不是一个类实例,而是一个类引用, 于是改成Frm_Client(主窗体), 看样子问题就在这里了。
  在外面调用TFrm_EmpSelect.Create(self),这个self表示外面的宿主;而在本类中调用,self是本类, 估计就是这个原因。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训