Frage

Ich hoffe, dass Sie auf einer nicht verwalteten C ++ -S-DLL mit verwalteten Code laden, und dann GetProcaddress auf externen Funktionen aufrufen, die gemischt wurden.Meine Frage ist, dass die verwirrten Namen von einem C ++ - Compiler deterministisch sind?Das heißt: Wird der Name immer mit demselben stinkenden Namen umgewandelt, wenn die Signatur des Originals nicht geändert hat?

War es hilfreich?

Lösung

es ist nicht in der Norm festgelegt und hat sich in meiner Erfahrung zwischen den Versionen desselben Compilers sicherlich geändert, obwohl sie über einige feste Set von Umständen deterministisch sein muss, da sonst keine Möglichkeit gibt, zwei separat zu verbindenKompilierte Module.

Wenn Sie GetProcAddress verwenden, wäre es viel sauberer, die Funktionen als generationstabelletischetagcode zu exportieren, sodass ihre Namen nicht gestempelt werden.

Andere Tipps

Es ist Compilerspezifisch, wie andere gesagt haben.Sie finden jedoch Details in einem Dokument von Agner Nebel ...

http://www.agner.org/optimize/#manuals

siehe Punkt 5 auf dieser Seite.

Auch in diesen Tagen gibt es Bibliotheken, die mit Mangeln und Demangeln von gemeinsamen Compilern für Sie umgehen können.Für visuelle C ++ wäre der Startpunkt die Dbghelp- und ImageHLP-Bibliotheken.

http://msdn.microsoft.com / en-us / library / ms679292% 28V= vs.85% 29.aspx

http://msdn.microsoft.com / en-us / library / ms680321% 28V= vs.85% 29.aspx

Name Mangeling wird von jedem Compiler anders behandelt (vielleicht oder nicht - es gibt keinen Standard).Wenn Sie reine C-Funktionen in Ihrem C ++ - Code verwenden, können Sie mit der externen "C" -Supress-Namensmangeling für die C-Funktionen verwenden, sodass der Compiler sie finden kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top