DLLs mit exportieren "@@" Funktionen
-
Hallo,
mit dem BDS entwickelte DLLs exportieren zusätzlich zu den von mir ohnehin per "extern "C" __declspec(dllexport)" deklarierten Funktionen für einige Klassen Funktionen der Form "@@Klassenname@Initialize" und "@@Klassenname@Finalize".
Ich habe festgestellt, dass wenn ich die standartmäßig in den Quelltextdateien eingefügte Direktive "#pragma package(smart_init)" entferne, diese Exporte verschwienden.
Weiss jemand wofür diese Funktionen sind? Ich gehe doch mal davon aus, dass diese ohnehin nicht aufgerufen werden würden, falls das Programm, welches die DLL letztendlich benutzt mit was anderem als Borland entwickelt wurde.
Vielen Dank.
-
Auszug aus der Borland-Hilfe:
Mit #pragma package(smart_init) stellen Sie sicher, daß Units eines Packages in der durch ihre Abhängigkeiten festgelegten Reihenfolge initialisiert werden (standardmäßig in der Package-Quelldatei enthalten). Normalerweise setzen Sie #pragma package für .CPP-Dateien ein, die als Packages compiliert werden.
Dieses Pragma wirkt sich auf die Reihenfolge der Initialisierung der Compilier-Unit aus. Units werden in folgender Reihenfolge initialisiert:
1. Nach ihren "uses"-Abhängigkeiten, d.h., wenn unitA von unitB abhängt, muß unitB vor unitA initialisiert werden.
2. Nach der Link-Reihenfolge.
3. Nach der Priorität innerhalb der Unit.
-
Danke für den Hinweis, aber das hatte ich auch schon gefunden. Meine Frage bezieht sich eher darauf, dass diese Funktionen zwar exportiert werden, aber sie doch sowieos niemand aufruft. Bzw ich wüsste gerne wer diese wann aufruft. Wird die DLL ja z.B. in Visual Studio verwendet kann ich mir nicht vorstellen, dass dieses die Funktionen jemals aufrufen würde.
Im übrigen wüsste vermutlich auch eine mit Borland erstelle Anwendung nicht, in welcher Reihenfolge diese DLL Funktionen aufgerufen werden sollen.Oder irre ich mich?
-
Doch, der Startcode bzw. Entladungscode der erstellten DLL (bzw. Exe) ruft die einzelnen Funktionen auf...
(warum diese Funktionen dann öffentlich gemacht sind, weiß ich aber nicht.)