Gleiche Klasse in Header-Datei zweimal unterschiedlich definieren?



  • Ist es möglich in einer Headerdatei eine Klasse auf 2 (leicht) unterschiedliche Arten zu definieren?
    Konkret gesagt will ich eine Klasse in einer DLL definieren, die einerseits importiert werden kann, also:

    #ifdef API_EXPORT
    #define MEINE_API __declspec(dllexport)
    #else
    #define MEINE_API __declspec(dllimport)
    #endif
    
    class MEINE_API Klasse {
    // Methodendefinitionen etc.
    }
    

    Auf der anderen Seite soll die selbe Klasse aber in einem anderen Projekt verwendet werden, ohne dass dabei die DLL exportiert wird. Die Klasse soll durch Einbindung der .h und .cpp Datei dort verfuegbar gemacht werden. Dann meckert der Compiler natuerlich, da er mit den __declspec - Befehlen ohne die entsprechende .lib Datei nichts anfangen kann.
    Deshalb habe ich mir ueberlegt, dass man die Klasse in der Header Datei vielleicht 2 mal definieren koennte:

    #ifdef FUER_DLL
    #ifdef API_EXPORT
    #define MEINE_API __declspec(dllexport)
    #else
    #define MEINE_API __declspec(dllimport)
    #endif
    
    class MEINE_API Klasse {
    // Methodendefinitionen etc.
    }
    
    #else //#ifdef FUER_DLL
    
    class Klasse {
    // Methodendefinitionen etc.
    }
    
    #endif // #ifdef FUER_DLL
    

    Das will aber in meinem speziellen Fall auch nicht wirklich funktionieren. Kann mein Problem irgendwie gelöst werden?

    (PS: und bitte keine Belehrungen, dass man Klassen nicht in DLLs exportieren sollte!)



  • API_EXPORT ist doch ein #define von dir...

    warum also nicht

    #ifdef API_EXPORT
    #define MEINE_API __declspec(dllexport)
    #elif defined(API_IMPORT)
    #define MEINE_API __declspec(dllimport)
    #else
    #define MEINE_API
    #endif
    

    Dann definierst du im DLL-Projekt API_EXPORT, im DLL-Client API_IMPORT, und im dritten Projekt nix davon.



  • Hmmm... ich probiers mal so. Auf die einfachsten Sachen kommt man ja oft nicht selbst. Danke erstmal.


Anmelden zum Antworten