Resourcen verschwenden würdest du zwar keine, wenn das FreeLibrary sowieso erst bei Beendigung deines Programms aufgerufen würde, aber mit ist es natürlich schon sauberer.
Ohne mehr Code kann ich leider nicht viel sagen, aber ich vermute mal, dass das implizierte _Release von Delphi dir da einen Strich durch die Rechnung macht. Hast du sichergestellt, dass deine Interface-Instanzen vor dem FreeLibrary jeweils einmal manuell auf
nil gesetzt wurden? Ansonsten könnte es passieren, dass die
DLL entladen wird und danach impliziert _Release (und damit der Destructor) der aus dem Scope-laufenden Objekte gecallt wird. Da zu diesem Zeitpunkt die
DLL dann schon entladen ist, gibt es an dieser Stelle die
AV.