Also erstmal verwenden EXE und
DLL immer den gleichen Speicher (außer bei Out-Of-Process-Servern, wo die
DLL stattdessen in einem anderem Prozecc geladen wird).
Aber die Verwaltung des Speichers geschieht in mehreren, unterschiedlichen und vorallem unabhängigen Speichermanagern, abgesehn von Shared-Memory, wo sich zwei/mehrere Speichermanager verbinden und gemeinsam arbeiten.
Windows bietet über VirtualAlloc nunmal keine "schöne" (klein skalierbare) und schnelle Möglichkeit an, weswegen da nochmal eine eigene Verwaltung zwischengeschaltet wurde.
(DelphiMM, FastMM usw. ... k.A. was FPC/Lazarus standardmäßig drin hat)
Und jeder Speichermanager kann natürlich nur den von ihm verwalteten Speicher freigeben.
Also entweder Shared, oder man
muß dort freigeben, wo man reserviert, wobei man das immer machen sollte, um den Überlick zu behalten.
Du kannst aber gerne eine GibSpeicherFrei-Methode in deine Schnittstelle einbauen und der den Pointer/Speicher mitgeben.