Programm klein und ohne DLLs



  • Ein frohes neues Jahr euch allen.

    Ich habe ein dialogbasiertes Programm unter VS .NET 2003 auf Win XP entwickelt, welches nachher auf Win 2000 laufen soll. Nun habe ich bei den Projekteinstellungen 3 Möglichkeiten:

    • MFC in einer statischen Bibliothek verwenden
    • MFC in einer gemeinsam genutzten DLL verwenden
    • Windows-Standardbibliotheken verwenden

    Was ist am sinnvollsten? Wenn ich statisch mache, klappt alles, das Programm ist aber 5MB groß. Nehme ich dynamisch, fehlen auf dem Zielrechner 4-5 DLLs, was auch keine Lösung darstellt. W-SB hab ich nich nicht probiert. Hätte aber gerne eine kleine Applikation ohne DLLs (falls das geht).

    zwette



  • Benutzt du denn die MFC?

    Wenn ja, dann musst du dich wohl zwischen Punkt 1 und 2 entscheiden.

    Und die Entscheidung wirst du wohl selbst treffen müssen.



  • Ja, habe eine Dialog-Anwendung mit dem Wizard erstellt und die basiert meines Wissens nach auf der MFC (CDialog)!? Geht das auch ohne? Ist aber wahrscheinlich zu umständlich. Wie ist das denn bei kommerziellen wie z.B. Word, Photoshop, etc.? Kopieren die auch immer mfc70.dll & Co. ins Systemverzeichnis?



  • Also, Word ist glaub ich nich mit der MFC geschrieben...Microsoft benutzte denk ich mal öffter die WinAPI als die MFC. Visual Studio 2003 ist aber mit den Windows Forms geschrieben.
    Meines Wissens ist der Brockhaus Multimedial 2005 mit der MFC geschrieben. Das Programm benutzt die DLLs.



  • Vorteil DLL:
    Wenn ein bug in der mfc gefunden wird brauchst du nur die neusest dll runterladen und der bug ist behoben
    Hingegen bei der lib musst du dein Programm neu compilieren und dein Programm ist auch größer
    mfg



  • spjoe schrieb:

    Wenn ein bug in der mfc gefunden wird brauchst du nur die neusest dll runterladen und der bug ist behoben
    Hingegen bei der lib musst du dein Programm neu compilieren und dein Programm ist auch größer

    Aah, ok, das klingt mal überzeugend. Gut, das Argument gefällt mir, also dynamisch. Jetzt bleibt noch die Frage: Wie bekomme ich genau heraus, welche DLL-Dateien er braucht? Bisher habe ich es immer so gehandhabt, dass ich das Programm auf das Zielsystem kopiert habe und dann die ganzen "mfcxx.dll fehlt"-Meldungen abgearbeitet habe. Sicher ist das nicht, wer weiss, ob das System schon einige hatte, die ein anderes nicht hat. Es waren so um die 5 Dateien glaube ich.



  • zwette schrieb:

    Wie ist das denn bei kommerziellen wie z.B. Word, Photoshop, etc.? Kopieren die auch immer mfc70.dll & Co. ins Systemverzeichnis?

    Keine Ahnung ob Word mit MFC geschrieben wurde, aber die meisten Installer machen es genau so das sie die MFC-DLLs in´s Systemverzeichnis patschen. Da liegen dann auch schonmal mehrere Versionen je nachdem wer was braucht. Was du alles brauchst findest du am besten mit dem Dependency Walker raus -> http://www.dependencywalker.com/

    Edit: Den Download kannste dir glaub ich schenken. Guck mal unter C:\Programme\Microsoft Visual Studio .NET 2003\Common7\Tools\Bin\ nach einer depends.exe.



  • http://www.dependencywalker.com/

    Mit diesem Programm deine exe öffnen. Dann siehst du die benötigten DLLs.



  • Also, wenn du ein Setup Projekt machst, fügt der die DLLs die benötigt werden automatisch hinzufügen.
    Bei meinem letzten waren das folgende:

    mfc71.dll
    mfc71u.dll
    msvcr71.dll

    Nach deiner Methode (hab ich mal auf meinem "Testrechner" gemacht), weiß ich noch, dass die mfc71d.dll bei mir gefehlt haben.



  • @asdrubael&dynamiker:

    Das ist mal ein cooles Programm, kannte ich garnicht. Auf diesem Rechner hier ist noch kein VS und er zeigt mir folgende Dateien an: MFC70D.DLL, MSVCP70D.DLL & MSVCR70.DLL (die Version wurde noch mit VS .NET 2002 entwickelt)
    Mal schauen, ob's dabei bleibt. Ich muss mir wohl nen Installer dazu entwerfen, sonst isses unsauber. Muss ja garantieren, dass das Programm erstmal auf so ziemlich jeder Win-Plattform läuft (mindestens mal bis Win98 runter).



  • MFC70D.DLL, MSVCP70D.DLL & MSVCR70.DLL

    Oh man, das deutet ja darauf hin das du die Debug-Version weiter geben willst.

    Gib dein Programm im Release-Modus weiter.



  • Danke für den Hinweis, darauf hätte ich jetzt garnicht geachtet. Bin noch die ganze Zeit am entwickeln, da ist es nervig, dauernd zwischen Debug und Release umzuschalten.


Anmelden zum Antworten