Передача интерфейсов как параметров функций

Объясните мне, дураку, чем передача объектов в качестве параметров функций отличается от передачи интерфейсов (ну, фактически, объектов, реализующих эти интерфейсы).
К примеру была сигнатура такая:
В него последним передавался объект типа TMyContext - наследник TContext. И там с ним внутри все работало, почему бы и нет. Но в паскале из-за наличия жесткого принципа нежелательности взаимных ссылок двух модулей друг на друга (в uses), да и в общем смысле из-за нарушения принципа инверсии зависимостей я все думал, как мне избавиться от этой проблемы.
Вынес Context в интерфейс. Переписал сигнатуру метода следующим образом:
Однако передавая в этот метод объект, реализующий интерфейс IContext (который по умолчанию наследник IInterface = IUnknown), ссылка на него сразу пропадает. При отладке тупо складывается впечатление, что ссылка на этот объект просто где-то теряется, но где, я понять не могу пока что.
Может кто здесь поможет разобраться?
К примеру была сигнатура такая:
- Код: Выделить всё
procedure Execute(const Command: string; Data: TVisited; Context: TContext);
В него последним передавался объект типа TMyContext - наследник TContext. И там с ним внутри все работало, почему бы и нет. Но в паскале из-за наличия жесткого принципа нежелательности взаимных ссылок двух модулей друг на друга (в uses), да и в общем смысле из-за нарушения принципа инверсии зависимостей я все думал, как мне избавиться от этой проблемы.
Вынес Context в интерфейс. Переписал сигнатуру метода следующим образом:
- Код: Выделить всё
procedure Execute(const Command: string; Data: TVisited; Context: IInterface);
Однако передавая в этот метод объект, реализующий интерфейс IContext (который по умолчанию наследник IInterface = IUnknown), ссылка на него сразу пропадает. При отладке тупо складывается впечатление, что ссылка на этот объект просто где-то теряется, но где, я понять не могу пока что.
Может кто здесь поможет разобраться?