Portieren einer MFC Anwendung auf andere Plattformen (Windows XP, 2000 ect.)



  • Hallo zusammen,

    ich habe eine MFC Anwendung geschrieben, jedoch habe ich dass Problem, dass Sie nicht auf Plattformen wie einem Windows Server 2003, Windows 2000 oder XP verwendet werden kann. Dies ist jedoch mein Ziel.

    Kann mir jemand sagen, wie ich es hinbekomme mittels Visual Studio 2013 oder 2012 und Windows 8.1 die MFC Anwendung für eine oben genannte Plattformen portiere?

    Vielen Dank.


  • Mod

    BTW1: XP? Ist das ein Witz?
    BTW2: Warum benutzt Du nicht Google?

    Aber OK, Du benötigst VS2012 Update 1, damit geht es.

    Anleitung hier:
    http://blogs.msdn.com/b/vcblog/archive/2012/11/26/visual-studio-2012-update-1-now-available.aspx

    In VS-2013 musst Du das Platform Toolset "Visual Studio 2013 - Windows XP (v120_xp)" auswählen



  • @Martin Richter
    Weisst du zufällig ob es auch mit 2012 Update 2, 3 und 4 geht?

    Ich kann mich erinnern gelesen zu haben dass MS bei irgend einem späteren Update den XP Support wieder kaputt gemacht hat.

    ps: Wir liefern auch immer noch Produkte aus die auf Windows XP basieren.


  • Mod

    Update 2 war das Problem. Mit Update 3 war wieder allesOK.

    Ich finde es "etwas" unverantwortlich Software für XP weiter zu unterstützen.



  • Danke für die Info!

    Martin Richter schrieb:

    Ich finde es "etwas" unverantwortlich Software für XP weiter zu unterstützen.

    Liegt nicht an mir + ich kann dran auch nix ändern. Ich red seit Jahren dass die Software mal auf Win7 portiert gehört. Ist aber auch alles ne Zeitfrage...



  • Vielen Dank für die Hilfe! Hat geklappt.

    Ich bin auch nicht froh, dass Windows XP weiter Supported wird, jedoch wird von meinem Arbeitgeber weiterhin XP verwendet, da er über den Computer nicht ins Internet geht.

    Eine Frage habe ich noch - vielleicht kann mir jemand dabei helfen:

    Undzwar hab ich 2 Anwendungen gehabt die ich für Windows XP zum laufen bekommen wollte. 1 Anwendung hat einwandfrei geklappt. Jedoch habe ich die andere genau mit den gleichen Einstellungen Veröffentlicht und habe nun das Problem, dass bei dieser Anwendung die Fehlermeldung: " Die Anwendung konnte nicht gestartet werden, weil mfc120ud.dll nicht gefunden wurde. ..." erscheint.

    Kann mir da vielleicht jemand weiterhelfen?

    Edit:

    Ich kompiliere die Anwendung mittels Visual Studio 2013:
    - MFC in einer Statischen Bibliothek verwenden
    -Unicode Zeichensatz
    -Common Language Runtime Unterstützung
    -Linkzeitcodegenerierung verwenden

    Vielen Dank!



  • Wenn du das Projekt wirklich auf "MFC statisch" eingestellt hast, dann linkst du irgendwas anderes dazu was die MFC DLL braucht.
    => DependencyWalker

    ps: vielleicht vergessen auch die Release-Config auf "MFC statisch" umzustellen?



  • Vielen Dank erstmal für die schnelle Antwort.

    Wo stellt man die Release-Config auf statisch?



  • Na im Projekt-Einstellungs-Fenster, dort wo du die "MFC in einer Statischen Bibliothek verwenden"-Geschichte einstellen kannst, einfach oben die Config auf "Release" umstellen.



  • Achso, das war gemeint. Das hab ich auf Release stehen.

    Depency Walker liefert mir folgende Meldungen - Alle werden nicht gefunden:

    - API-MS-WIN-CORE-KERNEL32-PRIVATE-L1-1-1.DLL
    - API-MS-WIN-Core-PRIVATEPROFILE-L1-1-1.DLL
    - API-MS-Win-SERVICE-PRIVATE-L1-1-1.DLL
    - API-MS-WIN-CORE-SHUTDOWN-L1-1-1.DLL
    - EXT-MS-WIN-NTUSER-UICONTEXT-EXT-L1-1-0.DLL
    - IESHIMS.DLL



  • Das sind alles keine echten Probleme.
    Aber darum geht's auch nicht.

    Du sollst DependencyWalker verwenden um zu gucken welches Modul dir die mfc120ud.dll reinzieht.



  • Achso, ok.

    Könntest du mir sagen wie dies funktioniert?

    Kenne dieses Tool leider nicht.



    1. Mach deine .EXE im DepencyWalker auf.
    2. Such in der Modul-Liste die MFC DLL.
    3. Wähl "Highlight Matching Module in Tree" im Kontextmenu der Zeile der MFC DLL aus.
    4. Guck wo du im Tree stehst - also über welches Modul die MFC DLL reingezogen wird.


  • Vielen Dank nochmals.

    Jetzt bin ich bei dem Tree und weiß nicht weiter. Wie genau finde ich heraus woran das Problem liegt und wie behebe ich dies?

    Anbei mal ein Link zu dem Tree. Ich verstehe da irgendwie nichts.

    https://www.dropbox.com/s/www9748d8vjuq03/MFC120UD.JPG

    Danke!



  • Naja jetzt siehst du dass deine .exe direkt selbst die MFC DLL benötigt (die MFC DLL hängt im Tree ja direkt unter der .exe drunter). Die MFC DLL wird also schonmal nicht (oder nicht nur) durch eine andere DLL reingezogen.

    D.h. du hast entweder deine .exe eben NICHT auf "statically link to MFC" umgestellt, oder du linkst in der .exe eine statische LIB die die MFC DLL einbindet.

    Und natürlich solltest du 64 Bit .exen auch mit dem 64 Bit Dependency-Walker aufmachen.


  • Mod

    Zudem ist das ein Debug Build.


Log in to reply