Du könntest meine Theorie relativ einfach testen, indem du im Destructor deiner Objekte (die aus der
DLL) mal eine MessageBox einbaust. Dann
ersetzt du das FreeLibrary durch eine weitere MessageBox.
Erscheint jetzt die FreeLibrary Message vor der Message aus dem Destructor, weißt du, dass irgendwo noch Objektinstanzen existieren, die vor dem FreeLibrary nicht freigegeben werden.