Name Mangling bei DLLs?



  • Wie funktioniert eigentlich Name Mangling bei DLLs? Die statischen Libs, gegen die man linkt, sind ja noch Compilerspezifisch, die kompilierten DLLs kann aber jedes Programm nutzen, egal mit welchem Compiler es kompiliert wurde.

    Es muss also zwangsläufig ein einheitliches Schema geben, wie sieht das aus?



  • meines Wissens geht das nur wenn die DLLs nach außen C-Funktionen deklarieren (mit Extern "C" im C++-Code kriegt man C-namemanling hin) DLLs mit C++-Interface dürften compilerspezifisch sein.
    Bin auf dem gebiet aber absoluter Laie und lass mich gern eines bessseren belehren 🙂



  • Mein Name ist Hase schrieb:

    die kompilierten DLLs kann aber jedes Programm nutzen, egal mit welchem Compiler es kompiliert wurde.

    Nein, C++ DLLs haben kein standardisiertes ABI.



  • Tatsächlich mußt du dich für so einen Fall auf ein C-Interface beschränken - oder aber COM und safecall-Funktionen benutzen. Letzteres ist aber in C++ mit recht viel Handarbeit (oder alternativ jeder Menge unschöner Makros) verbunden.



  • Wenn es um das Thema shared Libraries bzw. shared APIs geht, ist man bei C++ praktisch immer auf einen Compiler festgelegt. Auch bei DLLs ist dies der Fall. Es gibt überlegungen bzw. Vorschläge beim C++ Komitee so ne Art JARs für C++ einzuführen. Naja, wurde aber abgelehnt. Die Compiler-Hersteller würden das nicht implementieren (siehe export-Schlüsselwort).

    Ich halte das ganze aber nicht für schlimm. Denn man kann ja auch auf andere Techniken setzen, die nicht zwingend was mit C++ zu tun haben. Hier wurde COM+ genannt, was ja sogar über C++-Grenzen hinweg funktioniert. Kann aber ohne ATL (Active Template Library) sehr umständlich sein zu implementieren. Also ist eine andere mögliche Alternative CORBA (dessen Potenzial unterschätzt wird). Was auch interessant sein kann, ist die Interprozess-Library von Boost.


Anmelden zum Antworten