Ich habe ein sehr vages Problem, aber ich hoffe, jemand kann mir helfen. Ich habe ein C++ Projekt geändert und gestern hat es noch funktioniert, aber heute nicht mehr. Ich bin mir ziemlich sicher, dass ich nichts geändert habe, aber um ganz sicher zu gehen, habe ich das Projekt noch einmal aus dem SVN ausgecheckt und sogar einen früheren Systemwiederherstellungspunkt wiederhergestellt (da dies ein Arbeitscomputer ist, werden manchmal heimlich Updates installiert usw.). Nachdem ich es erfolgreich kompiliert habe, kann das Programm starten, aber nachdem ich mit ihm interagiert habe, erhalte ich diesen Fehler: Der Prozedureinstiegspunkt ?methodName@className@@UAEXXZ konnte nicht in der dynamischen Link-Bibliothek libName.dll gefunden werden.
Ich habe das Internet durchsucht, aber die meisten Probleme scheinen auf eine ältere Version der verwendeten DLL zurückzuführen zu sein. Ich habe meinen Computer durchsucht, und es gibt keine ältere Version. Wenn ich die richtige Version lösche, lässt sich die Anwendung nicht starten. Wenn ich dann das Projekt neu kompiliere, wird die DLL wieder erstellt, so dass ich mir ziemlich sicher bin, dass die Anwendung die richtige DLL verwendet und dass die Kompilierung sie erstellt. Wenn ich in die Methode, auf die sich der Fehler bezieht, Syntaxfehler einfüge, weigert sich das Projekt zu kompilieren, was wohl bedeutet, dass es auch die Dateien kompiliert, die die Methode enthalten.
Grundsätzlich weiß ich nichts über DLLs, Verknüpfung, etc., so würde ich es sehr zu schätzen wissen, wenn jemand eine Idee, warum die Funktionen, die sehr klar in das Projekt definiert sind, sind ganz plötzlich nicht machen es in die DLL mehr hat. Ich weiß, dass dies vage ist, und wenn weitere Informationen erforderlich sind, werde ich sie gerne zur Verfügung stellen. Vielen Dank!
Aktualisierung: Ich habe die angegebenen Vorschläge ausprobiert, aber ich komme immer noch nicht weiter. __declspec(dllexport)
wird offenbar nicht im gesamten Projekt verwendet. Wenn ich die DLL mit Dependency Walker öffne, sehe ich oben rechts einen leeren Abschnitt und der Abschnitt darunter listet die Funktion aus der Fehlermeldung auf. Wenn ich die C++-Funktionen entdekorieren sieht es gut aus, aber wenn ich es nicht tue, erhalte ich die seltsamen Fragezeichen und @s aus der Fehlermeldung und es scheint einen Unterschied am Ende zu geben:
?methodName@className@@UAEXXZ
?methodName@className@@UAEXH@Z
Vielleicht ist das das Problem, aber ich habe keine Ahnung, was es bedeutet, was die Ursache dafür sein könnte und was ich dagegen tun kann.