Datamodul in DLL automatisch Initialisieren
-
Hallo zusammen,
ich wollte das Datenmodul welches ich in meiner Anwendung verwende automatisch Initialisieren sobald die DLL geladen wird in welcher das Datenmodul enthalten ist. Dazu habe ich folgendes mir überlegt:
DLL-CPP Datei:
#include "TPOdatamodul.h" ... int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved) { switch (reason) { // Den Grund des DLL-Aufrufs/Verlassens ermitteln // und ggf. entsprechend darauf reagieren. // Die DLL wurde geladen. case DLL_PROCESS_ATTACH: InitDm(); break; // Durch den zugehörige Prozeß wurde ein neuer Thread gestartet. case DLL_THREAD_ATTACH: break; // Durch den zugehörige Prozeß wurde ein Thread beendet. case DLL_THREAD_DETACH: break; // Die DLL wird freigegeben (z.B. durch Aufruf von FreeLibrary). case DLL_PROCESS_DETACH: ReleaseDm(); break; } return 1; } ... void InitDm(void) { if (tpodm) return true; //CoInitializeEx(NULL, COINIT_MULTITHREADED); CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); tpodm = new Ttpodm(NULL); return (tpodm); } ... void ReleaseDm(void) { if (!tpodm) return; delete tpodm; tpodm = NULL; CoUninitialize(); }
Der Programmstart funktioniert bestens. Das Datenmodul ist Initialisiert. Allerdings bekomme ich dann beim Beenden des Programms wiederum folgende Fehlermeldung:
An Exception (C0000005) occurred during DllEntryPoint od DllMain in module: DM.DLL
Der Fehler kommt genau dann wenn in der 'ReleaseDm()' funktion das 'delete tpodm' ausgeführt werden soll. Wenn ich ReleaseDm() ganz aus der 'WINAPI DllEntryPoint' Funktion herauslasse gibt es keine Fehlermeldung. Aber dann wird doch das Datenmodul nicht korrekt gelöscht? Was mache ich da falsch?
Würde mich über Hilfe freuen.
Grüße Netzschleicher
-
Ist zwar wohl nicht wirklich der Grund für den Fehler, aber:
MSDN schrieb:
[...] do not call CoInitialize, CoInitializeEx, or CoUninitialize from the DllMain function.