4 Stimmen

LoadLibrary schlägt fehl, wenn eine bestimmte Datei beim Erstellen der DLL eingeschlossen wird

Ich bekomme wirklich seltsames Verhalten in einer der DLLs meiner C++-App. Es funktioniert und lädt einwandfrei, bis ich eine einzige Datei in der Hauptdatei der DLL mit #include einbinde. Dann erhalte ich diese Fehlermeldung:

Komponenten werden aus D:/Targets/bin/MatrixWorkset.dll geladen Konnte "D:/Targets/bin/MatrixWorkset.dll" nicht laden: Kann die Bibliothek MatrixWorkset nicht laden: Ungültiger Zugriff auf Speicherort.

Jetzt habe ich den Code durchsucht und gegoogelt und kann nicht herausfinden, was passiert. Bis jetzt war alles in einer einzigen DLL, und ich habe beschlossen, es in zwei kleinere aufzuteilen. Die Datei, die die Probleme verursacht, gehört zur anderen zweiten Bibliothek (die problemlos lädt).

Über Ideen wäre ich wirklich dankbar. Vielen Dank, Jaco

0 Stimmen

Zeigen Sie etwas Code, ein #include kann alles tun.

0 Stimmen

OK, nach weiterem Debuggen. Die Datei (mit der Klasse MatrixVariable) muss nicht einmal in anderen Dateien enthalten sein. Ich muss sie einfach zum Makefile für die DLL hinzufügen, was die DLL zerstört. MatrixVariable erbt von einer Klasse innerhalb der zweiten DLL und das war es auch schon. Es hat funktioniert, als nur 1 DLL verwendet wurde.

0voto

Chris Punkte 1

Ich hatte genau das gleiche Problem. Eine DLL, die bisher einwandfrei funktioniert hatte, hörte plötzlich auf zu funktionieren. Es gab einen Zugriffsverletzung im CRT-Bereich, der statische Objekte initialisiert. Ein Neuaufbau hat das Problem nicht behoben. Aber als ich manuell alle statischen Objekte auskommentierte, beschwerte sich der Linker über eine beschädigte Datei. Erneut verlinken: Hat funktioniert. Jetzt kann ich LoadLibrary aufrufen. Dann fügte ich nach und nach die statischen Objekte wieder hinzu. Jedes Mal, wenn ich rekompilierte und ein LoadLibrary testete, funktionierte es einwandfrei. Schließlich waren alle meine statischen Objekte zurück und alles funktioniert wieder normal.

Wenn ich raten müsste, wurde möglicherweise eine Zwischendatei, die vom Linker verwendet wird, beschädigt (ich sehe ständig, wie die ilk-Dateien von link.exe beschädigt werden). Vielleicht könntest du alle Dateien löschen und einen sauberen Build durchführen? Aber ich vermute, dass du die Dinge bereits gelöst hast, da dies sechs Monate alt ist ...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X