Avoiding name mangling in Qt dll



  • Hi All

    I have created a -QT- Qt Library.
    But when i try to use that dll I see the names of all the functions in dll are name mangled.

    How to avoid this?



  • first of all, which platform and which compiler tool chain do you use?

    C++ has no definitions, how names are exported. If you want to export C style functions, you have to mark this section as C

    @
    extern "C"
    {
    // my C-functions to export
    }
    @



  • Hi

    below is my example code
    @class Temp
    {
    void fun1();
    void fun2();
    };@

    My above code is developed as -QT- Qt Library.
    but when I try to use extern "C" for each function it gives me error.
    Is there any keyword in QT which is equivalent to extern "C".



  • extern "C" only works for functions, not for class members. Class members will always be mangled names.

    Why do you need that?

    and you did not answer my first question:

    bq. first of all, which platform and which compiler tool chain do you use?



  • Hi

    I am using Visual studio 2010.
    I want to load my dll dynamically in client application.
    And use function pointers to call functions from the class.

    So wat is the solution for class members to avoid name mangling.



  • There is no. You can't load a dll dynamically and call class members idrectly, this is not possible. If you want to use classes, use a creator design pattern with interfaces or use early binding.



  • Name mangling is part of the C++ ABI you cannot disable it. You'll need to wrap the management of your C++ objects in plain C functions and be sure to mark those functions as extern "C" as Gerolf said.



  • ... and you cannot use simple functions pointers to "call methods on objects":http://www.parashift.com/c++-faq-lite/pointers-to-members.html.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.