Ich wurde mit einer C++ - DLL und zugehörigen Header-Datei zur Verfügung gestellt, um es mit meiner Anwendung zu integrieren. Zunächst versuche ich einfach, die DLL aus einer einfachen Win32-Konsolenanwendung aufzurufen (ich verwende Visual Studio 2008 Express).C++ - Verknüpfung zu 3rd Party DLL - intermittierende Zugriffsverletzung
Ich habe die DLL verknüpft, indem Sie es als zusätzliche Abhängigkeit in den Projekteinstellungen angeben.
Die Schnittstelle (d. H. Die einzige exportierte Funktion) gibt einfach einen Zeiger auf eine Instanz der Klasse zurück, die ich tatsächlich aufrufen muss. Ich kann das erfolgreich aufrufen, den Zeiger holen und die erste Funktion aufrufen, die ich brauche (eine "Init" -Funktion).
Wenn ich komme, um die Funktion, die tatsächlich die Verarbeitung, die ich benötige, aufzurufen, bekomme ich intermittierend einen "0xC0000005: Zugriffsverletzung lesen Speicherort ...." Fehler. Das heißt, ich führe das Programm aus - es funktioniert erfolgreich und beendet - ich versuche, es erneut auszuführen (nichts zu ändern - alle Parameter sind fest codiert) und erhalte den Fehler (und mache es weiterhin).
Ich kann das Problem nicht ständig neu erstellen, aber ich beginne zu denken, dass es etwas mit der DLL nicht ordnungsgemäß entladen - nachdem ich den Fehler bei einer Gelegenheit versucht habe versucht, löschen die DLL und wurde von erzählt Windows, dass es verwendet wurde. Das heißt, bei einer anderen Gelegenheit war ich in der Lage, die DLL zu löschen, nachdem der Fehler erhalten wurde, kopieren Sie es zurück, und bekam dann den Fehler beim nächsten Lauf.
Sollte die DLL korrekt entladen werden, wenn meine .exe beendet? Wäre es besser, wenn ich versuche, die DLL explizit zu laden/zu entladen, anstatt sie implizit auszuführen?
Jede andere Hilfe oder Beratung sehr geschätzt.
Dies ist eine sehr allgemeine Frage - können Sie Code oder Dokumentation jeglicher Art eingeben? – Tim
Tritt dies im Debugger auf? Oder, wenn es passiert, warum hängen Sie keinen Debugger an und schauen sich den Call-Stack an? – MSN