VC++ Runtimes, STL und DLLs unter einen Hut bringen



  • Hi Leute!
    Ich schreibe seit längerer Zeit so ein kleineres Framework.
    Am Ende habe ich dann eine DLL mit dem Framework und das Programm, das sie nutzt.
    Das Framework benutzt die STL ziemlich intensiv.

    Leider benötigt das Programm (und das Framework) die VC++ Runtimes DLLs (mscrv, msvcp, ...)
    Wenn also einer meiner Freunde das Programm nutzen will, muss jeder dieses vcredist installieren.
    Das nervt.
    Die Runtime-DLLs gleich mitliefern macht auch Probleme, denn ich hab Vista x64 und die haben XP (32).

    Die erste Lösung wäre: die Runtime statisch linken!
    Aber das geht nur bei Anwendungen, nicht bei DLLs:
    Beispiel: std::string DLL_EXPORT GiveMeAnyString();
    macht Fehler.

    Gibt's trotzdem eine Möglichkeit auf das Installieren von VCRedist zu verzichten, oder muss das jedesmal sein?
    Wie machen das die "großen" Programme, die in VC++ geschrieben sind? Die haben auch eine Menge hauseigener DLLs.

    Vielen Dank im Voraus!


  • Mod

    Das Zauberwort heißt private assemblies!
    Alle Diene Module müssen dann die DLLs aus dem Applikationverzeichnis nutzen.
    http://www.codeproject.com/KB/cpp/PrivateAssemblyProjects.aspx



  • Danke! Alles was ich gebraucht habe!


  • Mod



  • Hm, ich verstehe immer noch nicht, was die Hacks mit den Manifesten sollen. Wenn man kein Setup erstellen kann/will, dann kopiert man einfach die Verzeichnisse aus VC\redist\x86 (Platform ggf. anpassen) dazu und gut ist (geht vielleicht nicht unter Win2k, aber ich mach deswegen doch keine Verrenkungen, sollen Win2k-Nutzer halt das redist installeren).


  • Mod

    Der Nachteil ist klar: Du musst die SxS Installation benutzen und sie wird genutt. Wenn Du kontrolliert Deine eigene CRT ausliefern willst und auch möchtest, dass die CRT aus Deinem Verzeichnis benutzt wird, dann musst Du die Manifeste ändern.

    Mit meinem Hack kann man simpel ein Verzeichnis kopieren und die Software läuft ohne weitere Installation.


Log in to reply