Selbe Header in DLL udn Clientanwendung verwenden



  • Hallo, ich möchte die Header meiner DLL ohne Änderung zugleich als Header in der Clientanwendung verwenden.
    Dies geht mit einem Trick, der unter folgenden Links identisch beschrieben wird:

    http://marquardtnet.info/cecke/tutorials.8/8_dll.html
    http://msdn.microsoft.com/de-de/library/8fskxacy.aspx

    Code zum Beispiel:

    #ifdef __DLL__
    #	define DLL_TYP __declspec(dllexport)
    #else
    #	define DLL_TYP __declspec(dllimport)
    #endif
    

    Nur Frage ich mich, wo muss das _DLL_ oder _EXPORTING definiert werden, in welche Datei (also z.B. #define _DLL_) muss das rein?

    Danke.

    PS: Ich hoffe ich bin im richtigen Forum, bitte nihct böse sein wenn nicht.



  • Das definierst Du nur in Deinem DLL-Projekt! Und dort in den Projekteinstellungen (C/C++|Preprocessor Definitions).
    Oder alternativ in der cpp-Datei *bevor* die die h-Datei includierst.



  • Wenn ich das richtig verstanden habe willst du wissen wo du das DLL_TYP hinschreiben sollst, richtig?

    Das muss entweder vor die funktion oder wenn du eine Klasse exportieren willst vor die Klasse, also:

    #include "dll_global.h" //<-- da stehen die defines drin
    class DLL_TYP eineKlasse
    {
       //...
    };
    

    oder

    #include "dll_global.h"
    void DLL_TYP eineFunktion(int a, int b)
    {
       //...
    }
    


  • Danke an Jochen Kalmbach, das mit den C/C++|Preprocessor Definitions hat funktioniert, das mit dem include in der cpp Datei ging nicht.

    Jetzt kann ich die header für die dll in identischer Form auch bei der Clientanwendung einbinden.



  • also ich kenn es so, dass das projekt eine header datei hat, die jeder header einbindet.
    heißt bei uns meistens dllnamedefs.h
    die definiert das import

    zusätzlich gibt es ja noch das precomiled header file, dass jede cpp einbindet.
    die definiert das export

    da in den c/cpp zuerst immer das pch includiert werden muss gilt beim compilieren immer das export

    wird von woanders nur der header eingebunden ist nur das import siochtbar:

    beispiel:

    myDllDefs.h

    #ifdef _MYDLL_SPEC_
    #    define _MYDLL_SPEC_ __declspec(dllimport)
    #endif
    

    myDllpch.h

    #define _MYDLL_SPEC_ __declspec(dllexport)
    

    irgendein.h

    #include "myDllDefs.h
    
    class _MYDLL_SPEC_ MyClass
    {
    public:
      static int calcStuff();
    }
    
    void _MYDLL_SPEC_ makePeace();
    

    irgendein.cpp

    #include "myDllpch.h"
    #include "irgendein.h"
    
    #include <string>
    
    static int MyClass::calcStuff()
    {
      return 666;
    }
    
    void makePeace()
    {
      throw std::string("Not Possible");
    }
    

Anmelden zum Antworten