C++ DLL in ANSI C einbinden



  • Ist es möglich eine C++ DLL in ANSI-C einzubinden.

    Es werden ausschließlich Funktionen exportiert und zwar mittels

    __declspec(dllexport)
    

    In den Headern der DLL sind keien Konstrukte die ANSI-C nicht versteht.

    Als Compiler verwende ich entweder VC6 oder VC2005.

    Wenn ich die Header Datei der DLL include und die .LIB in das Projekt einbeziehe erhalte ich diese Fehlermeldung:

    OmiExeC.obj : error LNK2019: unresolved external symbol __imp__OmiGetDev referenced in function _main
    

    Benötige ich eine .DEF Datei? Wenn ja, wie erzeuge ich die am besten?



  • Beim Funktionsnamen vertippt ?



  • Wenn du die Funktionen für C nutzen willst, mußt du das Name Mangling berücksichtigen (dient auf C++-Seite dazu, überladene Funktionen zu unterscheiden):

    #ifdef __cplusplus
    extern "C" {
    #endif
      //hier kommen die Funktionsprototypen rein
      ...
    #ifdef __cplusplus
    }
    #endif
    


  • C++ Syntax in dlls ? 😕



  • CStoll schrieb:

    Wenn du die Funktionen für C nutzen willst, mußt du das Name Mangling berücksichtigen (dient auf C++-Seite dazu, überladene Funktionen zu unterscheiden):

    #ifdef __cplusplus
    extern "C" {
    #endif
      //hier kommen die Funktionsprototypen rein
      ...
    #ifdef __cplusplus
    }
    #endif
    

    Ich habe diesen codeteil immer so versatanden dass er dazu dient den umgekehrten Weg zu unterstützen, also C Funktionen in C++ verfügbar zu machen.

    So funktioniert es dann auch.
    Vielen Dank



  • Der Code funktioniert in beide Richtungen - der sagt dem C++ Compiler, daß er alle Funktionen zwischen den beiden #ifdef/#endif Blöcken mit C-Bindung deklarieren soll (das ist sowohl für C-Biliotheken gut, die mit C++ verarbeitet werden sollen, als auch für C++ Bibliotheken, die du in C einbinden willst).

    @Tippteufel: Wie bitte?


Anmelden zum Antworten