电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

创建窗口时出现GetDynaMethod错误


发布日期:2021/12/17
 

某个子窗口不是通过create(aowner)创建而是通过另一个公共方法

procedure TFrm_EmpSelectSelectEmp(FList:Tlist);

begin

List:=Flist;

with TFrm_EmpSelectCreate(self) do

begin

try

Showmodal;

finally

Free;

end;

end;

end;

来调用主要是传递了一个参数FList

但是出现了错误跟蹤后发现是调用TCustomFormcreate > ……> TComponentCreate 时在函数GetDynaMethod的下面这段发生错误

@@haveVMT

MOV EDI[EBX]vmtDynamicTable EDI是DMT的入口

当时以为是否selectEmp函数不是类(static)函数的关系于是改成类函数编译通不过修改了一下通过了运行后就正常了

但是我又发现另外一个单元Loginpas里面的login函数也是同样用法也不是类函数(为什么不是构造函数又不是类函数但能够不实例化就调用 这个问题还有待研究) 可见改成类函数不是问题解决的关键 回想到改成类函数时编译错误发生在这行

with TFrm_EmpSelectCreate(self) do

这里self不是一个类实例而是一个类引用 于是改成Frm_Client(主窗体) 看样子问题就在这里了

在外面调用TFrm_EmpSelectCreate(self)这个self表示外面的宿主而在本类中调用self是本类 估计就是这个原因

上一篇:把Integer数组保存到文件、并读取

下一篇:TStrings的一些用法