Initialisieren regulärer DLLs
Da reguläre DLLs über ein CWinApp-Objekt verfügen, sollten sie ihre Initialisierungs- und Terminierungsaufgaben an derselben Stelle ausführen wie eine MFC-Anwendung: in den Memberfunktionen InitInstance und ExitInstance der von CWinApp abgeleiteten Klasse der DLL. MFC umfasst eine DllMain-Funktion, die von _DllMainCRTStartup für PROCESS_ATTACH und PROCESS_DETACH aufgerufen wird. Folglich sollten Sie keine eigene DllMain-Funktion schreiben. Die von MFC bereitgestellte DllMain-Funktion ruft InitInstance beim Laden der DLL und ExitInstance vor dem Entladen der DLL auf.
Eine reguläre DLL kann mehrere Threads verfolgen, indem sie in ihrer InitInstance-Funktion die Funktionen TlsAlloc und TlsGetValue aufruft. Mit diesen Funktionen kann die DLL threadspezifische Daten verfolgen.
Wenn Sie die MFC-Unterstützung für OLE, Datenbanken (bzw. DAO) oder Sockets in einer regulären, dynamisch mit MFC verknüpften DLL verwenden, dann werden die MFC-Debugbuilds der Erweiterungs-DLLs MFCOxxD.dll, MFCDxxD.dll und MFCNxxD.dll automatisch eingebunden (wobei xx für die Versionsnummer steht). Sie müssen eine der folgenden vordefinierten Initialisierungsfunktionen für jede dieser DLLs aufrufen, die Sie in CWinApp::InitInstance der regulären DLL verwenden.
Art der MFC-Unterstützung |
Aufzurufende Initialisierungsfunktion |
---|---|
MFC-OLE (MFCOxxD.dll) |
AfxOleInitModule |
MFC-Datenbank (MFCDxxD.dll) |
AfxDbInitModule |
MFC-Sockets (MFCNxxD.dll) |
AfxNetInitModule |
Was möchten Sie tun?
Worüber möchten Sie mehr erfahren?
Das Verhalten der C-Laufzeitbibliothek und _DllMainCRTStartup
Verwenden von Datenbank-, OLE- und Sockets-Erweiterungs-DLLs in regulären DLLs
Thread local storage wrappers (MFC Technical Note 58, nur auf Englisch verfügbar)