Ich erstelle eine C++ Win32-DLL mit einigen globalen Daten. Es gibt eine std :: map, die global definiert ist, und es gibt exportierte Funktionen in der dll, die Daten in die Map schreiben (natürlich nach dem Erhalt einer Schreibsperre).Zugriff auf globale Daten in einer DLL von einer exportierten DLL-Funktion
Mein Problem ist, wenn ich die Write-Funktion aus der DLL DllMain aufrufen, funktioniert es ohne Probleme. Aber wenn ich die DLL-Datei von einem anderen Programm laden und die Funktion aufrufen, die Daten in die globale Karte schreibt, es gibt mir diese Fehlermeldung:
WindowsError: exception: access violation reading 0x00000008
Gibt es etwas, das über das getan werden kann? Die gleiche Funktion, wenn sie von DllMain aufgerufen wird, hat Zugriff auf die globalen Daten in der DLL, aber wenn sie von einem anderen Prozess aufgerufen wird, hat sie keinen Zugriff auf die globalen Daten. Bitte um Rat.
Ich verwende den TDM-MinGW gcc 4.4.0 Compiler.
EDIT: Ok, ich habe herausgefunden, was das Problem ist, und vielen Dank für die Hilfe Jungs, aber das Problem war nicht mit einem Konstruktor Problem oder Unfähigkeit Karten im globalen Raum zu haben, aber ein Problem in das boost :: python, das ich benutze. Ich habe es getestet, aber da ich die DLL aus Python oder vielleicht etwas aufgerufen habe, wurde das Modul Urllib2 nicht in die DLL geladen. Jetzt muss ich sehen, wie ich es beheben kann.
Es könnte eine gute Idee sein, Ihre Auflösung als Antwort aufzuschreiben und zu akzeptieren, damit die Frage als "beantwortet" dokumentiert wird. Entweder das oder eine vorhandene Antwort akzeptieren, die am hilfreichsten war. – RBerteig