functon pointer und __stdcall



  • hi

    was ist falsch an:

    using funcpointer = auto (__stdcall*)(void) -> void;
    

    der VC++ akzeptiert das mit warnstufe 4. der g++ hat ein problem damit:

    error: invalid use of ‘auto’
    1> using funcpointer = auto (__stdcall*)(void) -> void;
    

    so nimmt er es:

    using funcpointer = void (*)(void);
    

    Meep Meep



  • Die __stdcall etc. Specifier sind Microsoft-spezifische Spracherweiterungen die ein anderer Compiler nicht notwendigerweise verstehen muss...



  • Es riecht ein wenig danach, als sei __stdcall nicht definiert.
    G++ verwendet für Aufrufkonventionen üblicherweise auch __attribute__ -Specifier, daher würde ich es mal so versuchen:

    using funcpointer = auto (__attribute__((stdcall))*)(void) -> void;
    

    oder so:

    #ifdef _MSC_VER
        #define MY_STDCALL __stdcall
    #else
        #define MY_STDCALL __attribute__((stdcall))
    #endif
    
    using funcpointer = auto (MY_STDCALL*)(void) -> void;
    

    Anmerkung: Mein lokaler G++ (7.1.0) hier unter Windows versteht allerdings von Haus aus __stdcall , ohne dass ich
    irgendeinen Header eingebunden hätte. Möglicherweise wurde das irgendwann mal eingebaut.


Anmelden zum Antworten