某个子窗口不是通过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是本类, 估计就是这个原因。
责任编辑:小草