Portieren einer MFC Anwendung auf andere Plattformen (Windows XP, 2000 ect.)
-
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 verwendenVielen Dank!
-
Wenn du das Projekt wirklich auf "MFC statisch" eingestellt hast, dann linkst du irgendwas anderes dazu was die MFC DLL braucht.
=> DependencyWalkerps: 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.
-
- Mach deine .EXE im DepencyWalker auf.
- Such in der Modul-Liste die MFC DLL.
- Wähl "Highlight Matching Module in Tree" im Kontextmenu der Zeile der MFC DLL aus.
- 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.
-
Zudem ist das ein Debug Build.