Nun macht dieser ModuleUnload Code Ärger mit dem C++ Builder, der hat mit der Variable i da drin scheinbar irgend ein Problem. Die Frage für mich ist aber: wozu brauche ich den Code in ModuleUnload überhaupt? Reicht es nicht aus, dass ich diese Liste in finalization freigebe?
Die Frage ist wie sich dieser Ärger äußert. Vielleicht lässt sich das ja korrigieren.
Ja, es macht einen sehr großen Unterschied, ob du den Code vor dem Entladen des Moduls ausführst oder danach in finalization. In der Unload-Prozedur ist das
Package noch nicht entladen, so dass es keine Probleme mit aus dem Hostprogramm in die Liste geschriebenen Klassen geben wird. Das finalization passiert aber erst danach (wo genau weiß ich aus dem Kopf bei Packages nicht), so dass es sein kann, dass es zu Fehlern bei der Freigabe dieser Objekte gibt.
So ähnlich ist auch der Grund weshalb man Interfaces, die zwischen Hauptprogramm und
DLL ausgetauscht wurden, vor dem Entladen der
DLL auf nil setzen sollte, damit es beim Beenden der Anwendung keine Schutzverletzungen gibt.