CRT-Initialisierung und DLLMain

Zitate:

Aus dem Dokument "Best Practices zum Erstellen von DLLs"http: //download.microsoft.com/download/a/f/7/af7777e5-7dcd-4800-8a0a-b18336565f5b/DLL_bestprac.do von Microsoft:

"DLLs weisen häufig komplexe Abhängigkeiten auf, die implizit die Reihenfolge definieren, in der sie geladen werden müssen. Der Bibliothekslader analysiert diese Abhängigkeiten effizient, berechnet die richtige Ladereihenfolge und lädt die DLLs in dieser Reihenfolge." [1]

"(innerhalb von DLLMain) Verwenden Sie die Speicherverwaltungsfunktion aus der dynamischen C-Laufzeit (CRT). Wenn die CRT-DLL nicht initialisiert ist, können Aufrufe dieser Funktionen zum Absturz des Prozesses führen." [2]

Von MSDN:http: //msdn.microsoft.com/en-us/library/988ye33t.asp

"Die _DllMainCRTStartup-Funktion führt mehrere Aktionen aus, einschließlich des Aufrufs von _CRT_INIT, wodurch die C / C ++ - Laufzeitbibliothek initialisiert und C ++ - Konstruktoren für statische, nicht lokale Variablen aufgerufen werden. Ohne diese Funktion würde die Laufzeitbibliothek in einer nicht initialisierten Bibliothek verbleiben Zustand."[3

"Zusätzlich zur Initialisierung der C-Laufzeitbibliothek ruft _DllMainCRTStartup eine Funktion namens DllMain auf." [4]

Fragen

Wenn Ihre DLL von CRT-DLLs abhängt, basierend auf [1], CRT-DLLs werden zuerst geladen (werden zuerst initialisiert), also wie [2] könnte passieren

Beyogen auf[3 und [4], _DllMainCRTStartup ruft _CRT_INIT auf, wodurch die CRT initialisiert wir [2] könnte passieren

Wenn eine ausführbare Datei Ihre DLL durch "Implizite Verknüpfung" lädt, wird das _DllMainCRTStartup (und DLLMain) Ihrer DLL vor dem Einstiegspunkt (mainCRTStartup oder WinMainCRTStartup) der ausführbaren Datei aufgerufen, basierend auf[3 - _DllMainCRTStartup ruft _CRT_INIT auf, wodurch die CRT initialisiert wird, und mainCRTStartup initialisiert auch die CRT. Was ist also eigentlich mit der CRT passiert?

Wenn Ihre DLL vor mainCRTStartup geladen wird, ist der Aufruf von CRT-Funktionen in DLLMain oder anderen Exportfunktionen sicher oder nicht?

Wer initialisiert eigentlich CRT-DLLs?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage