Multi-threaded DLL vs. Multi-threaded



  • Hey,
    ich habe ein Problem. Ich habe ein schönes kleines Programm, was bei mir super funktioniert (VS C++ 8.0 Express Edition, Multi-threaded DLL). Bei anderen Leuten aber wird das Programm nicht gestartet. Stattdessen gibt Windows (XP) eine ganz tolle Fehlermeldung aka "Anwendung konnte nicht richtig initallisiert werden. BlaBla. Bitte installieren Sie die Anwendung neu...". OK, nach vielen Versuchen habe ich herausbekommen, dass der Fehler nur auftritt, wenn die die Codeerstellung meines Programmes Multi-threaded DLL oder Multi-threaded Debug DLL ist. Wenn die Codeerstellung Multi-threaded oder Multi-threaded Debug ist, klappt alles wunderbar. Noch komischer ist es, dass das ganze Problem selbst bei diesem kleinen Programm auftritt:

    //Keine header oder so; nur diese 4 Zeilen
    int main()
    {
    return 0;
    }
    

    Kann mir wer erklären, warum dies so ist und was ich falsch gemacht habe?

    Danke...



  • Wenn Du als CRT die "Multithreaded DLL" ausgewählt hast, dann musst Du logischerweise auf die DLL der CRT mitliefern. Wenn Du das ganze ohne DLL ausgewählt hast, dann wird Dein Programm zwar etwas grösser, aber dafür brauchst Du die DLL nicht.
    Fazit: Wenn Du nichts installieren willst, dann musst Du ohne DLL Dein Projekt erzeugen.



  • Hi,

    wenn du dein Programm gegen die Multi-Threaded-DLL's (dynamisch) linkst,
    must du die DLL's für die C-Laufzeitbibliotheken mitliefern falls diese beim Client nicht vorhanden sind.
    Linkst du gegen die nicht DLL-Versionen (statisch), werden die Importierten-Funktionen
    aus der C-Laufzeitbibbliothek in deine exe mir eincompiliert.

    Die Vor- und Nachteile, muss man für sich entscheiden.

    Bei der statischen Variante wird deine exe größer.
    Bei der dynamischen, werden evtl. Bugs in der Bibliothek durch updates
    behoben.

    Gruss
    EB



  • Eigwntlich habe ich aber die msvcp80.dll und msvcr80.dll mitgeliefert. Ansonsten, eigentlich müsste dann ein Fehler aka "Die DLL-Datei xyz wurde nicht gefunden..." kommen.

    Naja, gibt es nicht so einen tollen Runtime-DLL-Installer von Microsoft, der alle DLLs automatisch installiert?



  • Andere Frage:
    Wenn ihr ein "Multithreaded DLL" Projekt macht, welche Dateien gebt ihr dann weiter?



  • Army-Player schrieb:

    Eigwntlich habe ich aber die msvcp80.dll und msvcr80.dll mitgeliefert. Ansonsten, eigentlich müsste dann ein Fehler aka "Die DLL-Datei xyz wurde nicht gefunden..." kommen.

    Leider geht das so nicht...
    Das ging mal (bis VC8); aber seid neuestem sind die DLLs signiert und haben speizielle Side-By-Side eigenschaften, die dann beim Starten der EXE geprüft werden. Und da die DLLs nicht korrekt installiert wurden geht es halt nicht...

    Army-Player schrieb:

    Naja, gibt es nicht so einen tollen Runtime-DLL-Installer von Microsoft, der alle DLLs automatisch installiert?

    Ja, sollte unter
    X:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\vcredist_x86
    liegen...


Anmelden zum Antworten