Delphi的支持 - > QueryInterface访问冲突异常

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并且它仍然发生.

任何想法将不胜感激!

Uwe*_*abe 5

即使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)