Statt Interfaces gibt es auch die Möglichkeiten des
OOP.
Also Vererbung und einen Vorfahren mit abstrakten Methoden und Feldern/Variablen verwenden.
Vom Prinzip her also wie mit Interfaces und Rückreferenzierung der Instanzen.
Durch Rückreferenzierung von Interfaces/Objekte/Callbacks in die andere
Unit oder in eine gemeinsam genutzt
Unit kann man solche verketteten Unitreferenzen auflösen.
Zirkuläre Unitreferenzen sind aber auch nichts anderes, als eine Rückreferenzierung auf aktive Inhalte der unter Implementation eingebunden
Unit, welche sich ebenfalls zur Laufzeit erst auflöst.
Statt statischer Verbindungen kann man auch erstmal komplett lose entwickeln, ohne dass sich Beide kennen, und die gegenseitigen Referenzierungen erst zur Laufzeit aufbauen, über systemglobale Objekte (FindWindow, NamedPipe, NamedMMF, GetProcAdress usw.)
Aber prizipiell ist es auch wieder das Selbe, nur dass hier die Rückreferenzierung nicht innerhalb der Delphi-Units, sondern über die gemeinsam genutzte Dinge aus System-DLLs erledigt wird.