VisualStudio (Klassenbibliothkenen und C++ include paths)



  • Morgen Miteinander,

    ich habe noch eine "blöde" Frage (wie immer) 🙂
    Ich habe eine VS2008 eine Anwendung, welche eine Klassenbibliothek (Static lib) enthält.
    Meine EXE hat diese referenziert.

    • Meine MyLib hat inkludiert Verweise von einer 3rdParty library.
      Und hat eine Header MyLibHeader.h welche #includes Verweise zur 3rdParty Lib hat.

    • Und meine Exe hat einen Verweise zur "MyLibHeader.h" aus meiner MyLib.

    Die Lib lässt sich übersetzen.
    Die Exe verwendet #include "MyLibHeader.h" , aber kann dann die Includes aus der 3rdParty Lib nich auflösen!? (Die Pfade Passen)

    FRAGE: Muss ich in meiner Exe AUCH auf die Headers der 3rdParty verweisen?



  • Dein Lib-Header sollte nur die Header der 3rdParty-Library einbinden, wenn sie auch von dem aufrufenden Programm benötigt werden (ansonsten solltest du diese komplett innerhalb deiner Lib kapseln).

    PS: Falsches Unterforum!



  • @Th69 genau das habe ich ja gemacht

    meine MyLib hat "nur" die IncludePath der 3rdParty lib, und die MyLibHeader.h verweist #include auf die header der 3rdParty lib.

    Meine EXE hat nur den IncludePath meiner Lib, und kennt so nur die "MyLibHeader.h"

    Wenn ich nun in meiner EXE die MyLibHeader #include(iere) , sagt er dass er die Header vieles welche in der MyLibHeader.h #include(iert) sind nicht finden kann.. was ich nich verstehe!?!?



  • Wenn das aufrufende Programm Zugriff auf die Header der 3rdParty-Library benötigt, dann mußt du die Pfade auch in dessen Projektoptionen angeben (d.h. sie sollten Teil (z.B. als eigenes Unterverzeichnis) deines öffentlichen Lib-Include-Verzeichnisses sein)



  • Das aufrufende Program hat die MyLib im Linker und die MyLibHeader.h der Lib. Und MyLibHeader.h verwendet Header der 3rdPArty Lib
    d.h. ich verwendet nich direkt die Header der 3rdParty in der exe sonder über die MyLibHeader (welche diese ja kapseln soll)

    bspw:

    MyLibHeader.h

    #include "Header3rdParty.h"
    class MyLibHeader
    {
     MyLibHeader(){...}
    }
    

    ExeHeader.h

    #include "MyLibHeader.h"
    class MyExe
    {
       void do()
    {
      MyLibHeader x();
    }
    }
    

    d.h. die ese muss ja die 3rdPartyHeader.h nich kennen bzw. deren pfade!?



  • Wie ich schon schrieb, wenn das aufrufende Programm die "Header3rdParty.h" nicht kennen soll, dann mußt du eine "MyLibHeader.h" erstellen, welche ohne diese auskommt (durch passende Kapselung, z.B. PIMPL-Idiom).



  • Ok Danke;) Das is Interessant;) Das geht in C# dann viel einfacher:)