Ein
Package ist praktich erstmal eine
DLL, welche aber zusätzlich "automatisch" seine
RTTI und andere globale Dinge shared.
Es ist somit praktisch wie ein "Teil einer EXE/
DLL", aber kann einzeln ausgetauscht werden (so lange sich die Schnittstellen nicht ändern), bzw. von mehreren Programmen gemeinsam genutzt werden (wie eine
DLL)
Ja, das kann man gut nutzen, um Komponenten in die
IDE einzubinden, ohne gleich die ganze
IDE neu kompilieren zu müssen.
Und dennoch hat man in der
BPL auf alles Zugriff, was die
IDE bietet und die
IDE kennt auch die
BPL (
RTTI).
Also gemeinsame Verwendung des selben Speichermanagers, der System-Units und die Units der
RTL/
VCL/FMX usw. , inkl. deren globaler Variablen.
Bei einer
DLL ist dagegen alles getrennt und man hat von der EXE aus nur Zugriff auf die
DLL, aber die
DLL keinen Zugriff auf die EXE.
Darum kann/darf man da auch keine Objekte durchreichen, da jeder seine eigene "Version" dieser Objekt-Klassen (
RTTI, Definitionen, Methoden, ...) besitzt, die grundsätzlich nicht kompatibel sind, und standardmäßig auch einen getrennten Speicher (kein SharedMemory) haben.