Es geht nicht nur um
VCL-Komponenten sondern generell um Objecte. Das der Fehler erst beim Beenden kommt hast du richtig erkannt. Problem ist das die
DLL und deine Anwendung getrennte Speichermanager verwenden. Beim Beenden versuchen diese den Speicher frei zugeben und da kommt es zu Fehlern weil der eine Speichermanager versucht Dinge frei zu geben die er gar nicht angefordert hat.
Aber man sollte generell keine Objecte zwischen
DLL und Anwendung austauschen. Dafür gibt es BPLs. Diese haben den Vorteil das sicher gestellt wird das die Objecte in der
DLL(
BPL) identisch mit denen außerhalb der
DLL(
BPL) sind. Denn bei normaler Verwendung per
DLL stellt ja niemand sicher das ein Object aus der
DLL von der gleichen Delphiversion mit dem gleichen Speicheraufbau stammt.