I have the following piece of code:
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;
This code is called many times during my application execution, but in some specific cases it fails inside the Supports() method. And more specifically - it seems to fall inside the QueryInterface() call within the Supports() method.
I checked that FControlList is not nil and FControlList[i] is not nil and it still happens.
Any idea will be appreciated!!!
Even if
FControlList[I]
is notnil
, that doesn't mean it points to valid data. The underlying object instance may have been freed already.I also suggest to remove the type cast to
IMyControl
.Supports
can take objects and interfaces as parameter, even if they arenil
, and produce the desired result.In addition you may consider using this way of calling
supports
for your convinience and readabilty of the code: