Das Problem ist m.E. dass die Anwendung sein "tApplication" Objekt an die
DLL übergibt.
Das funktioniert nur dann einwandfrei, wenn sowohl die Anwendung als auch die
DLL mit Packages (
RTL,
VCL) kompiliert wurden.
Wenn man die beiden Module ohne Packages kompiliert, wird der Linker sowohl in der
DLL als auch in der Anwendung alle unbenutzten Prozeduren und Methoden entfernen um die Dateigröße zu minimieren. Das Speicherlayout (Adressenoffset der Methoden) von dem "tApplication" Objekt ist dann möglicherweise nicht mehr identisch in den beiden Modulen - es kommt dann zum Crash. Vermeiden kann man dies nur, wenn man beide Module mit Packages kompiliert. Das "
VCL"
Package enthält immer das komplette Tapplication Objekt.