2.2 Einsprungpunkte beim Laden oder Entladen einer dynamischen Bibliothek

Sowohl unter Windows als auch unter Linux kann man bei Bedarf einen Einsprungpunkt vorsehen, der beim Einblenden in den virtuellen Speicher beziehungsweise beim Entladen aufgerufen wird; beispielsweise um Startdaten zu lesen oder Resourcen zu allokieren oder freizugeben.

Ist die entsprechende Funktion nicht vorhanden, dann macht das nichts; sie wird dann natürlich auch nicht aufgerufen.

Unter Windows kann man dafür eine Funktion DllMain() definieren, die vom Lader des Betriebssystems mit einem Parameter aufgerufen wird; anhand dieses Parameters kann die Funktion erkennen, ob die DLL geladen oder entladen wird, oder ob eine zugehörige Task gestartet oder beendet wird. Siehe Bibliothek Windowsversion.

Unter Linux kann man eine Funktion _init() definieren, die (falls vorhanden) beim Einblenden in den virtuellen Speicher ohne Parameter aufgerufen wird, und eine Funktion _fini(), die beim Entladen aufgerufen wird. Siehe dazu Bibliothek Linuxversion. Die Verwendung dieser Einsprungpunkte setzt allerdings beim Übersetzen der Bibliothek die Option -nostartfiles voraus, was wiederum ein Übergeben von Ausnahmen über die Schnittstelle verhindert. Das ist aber keine große Einschränkung: Ausnahmen hat man nur in C++, und da kann man sich ein globales Objekt definieren, dessen Konstruktor und Destruktor die Aufgabe von _init() beziehungsweise _fini() übernehmen.

www.wachtler.de