Sha*_*ron 1 delphi queryinterface access-violation
我有以下代码:
for i := 0 to FControlList.Count - 1 do
if Supports(IMyControl(FControlList[i]), IMyControlEx) then
begin
MyControlEx := IMyControl(FControlList[i]) as IMyControlEx;
MyControlEx.DoYourMagic(Self, SomeData);
end;
Run Code Online (Sandbox Code Playgroud)
在我的应用程序执行期间多次调用此代码,但在某些特定情况下,它在Supports()方法中失败.更具体地说 - 它似乎属于Supports()方法中的QueryInterface()调用.
我检查了FControlList不是nil而FControlList [i]不是nil并且它仍然发生.
任何想法将不胜感激!
即使FControlList[I]不是nil,也不意味着它指向有效数据.底层对象实例可能已经被释放.
我还建议删除类型转换为IMyControl.Supports可以将对象和接口作为参数,即使它们是nil,并产生所需的结果.
此外,您可以考虑使用这种方式来调用supports代码的便利性和可读性:
if Supports(FControlList[i], IMyControlEx, MyControlEx) then
begin
MyControlEx.DoYourMagic(Self, SomeData);
end;
Run Code Online (Sandbox Code Playgroud)