MFC Version von Hand ändern
-
Hallo,
ich bräuchte mal eure Hilfe, ich habe gerade ein Projekt, welches auf MFC71 und MSVCR71 aufbaut. Ich benötige diese Kompatibilität dringend. Nun möchte ich dieses Projekt aber in Visual Studio 2008 bearbeiten. Standardmäßig, werden hier aber die Version 90 eingebunden beim kompilieren und builden. Kann mir jemand helfen und sagen wo ich manuell eintragen kann welche MFC Versionen er verwenden soll?
danke schonmal unf gruß..
-
Das funktioniert nicht!
Du müsstest alle alten Libs und include Dateien aus VS-2003 übernehmen. Dann hättest Du eine Chance. Aber slebst hier bezweifle ich das dies geht, weil sich die Compilerinternas evtl. geändert haben...
Warum bitte willst Du ein altes projekt in einer neuen UI bearbeiten?
-
Erstmal danke für die schnelle Antwort. Das Problem ist das die .dll die aus dem MFC Projekt entstehen mit einem übergeordneten Programm funktionieren müssen, welches ebenfalls den Stand MFC71 hat. Ich schreibe eben aktuell Diplomarbeit und habe eben die Aufgabe, die Testfunktionalität des Visual Studio 2008 Team System auf diese Projekte zu untersuchen und anzuwenden. Da sie aber bei einem Aufwerten die komplette kompatibilität verlieren suche ich eben nach einer Lösung...
-
Ich muss gleich nochmal was fragen..
@Martin
Kannst du mir vielleicht sagen wo ich das in den Optionen ändern müsste, wenn ich die "alten" Libs einfügen wöllte? Ein direkter Aufruf der MFC kommt ja in keiner der Dateien vor, und diese liegen ja auch im Win System32 dir, also wird der Aufruf ja scheinbar intern durch den Compiler verursacht..Hänge hier wirklich an einem riesen Problem, weil ich eben eine Aufgabenstellung erwischt habe, wo niemand sich vorher einmal gedanken gemacht hat ob es überhaupt funktionieren könnte...danke..mfg
-
1. Die MS-Test Funktionen sind IMHO nur in managed Progammen möglich.
2. Warum migrierst Du das projket nicht einfach nach VS-2008
3. Du müsstest die LIB und INCLUDE Verzeichnisse komplett tauschen. Aber ich bezweifle das dies genügen wird.Mein Rat: Lass es bleiben... Wähle für Tests den Weg , wenn möglich.
-
Ja, das die "automatische" Testerstellung nur für Managed Code funktioniert weiss ich, aber es lassen sich ja auch Tests von Hand erstellen und mittels dem integrierten TestRunner ausführen und auswerten.
Das Projekt migrieren funktioniert nicht so einfach, denn die .dlls, die aus den zu testenden Projekten rausfallen werden in einem übergeordneten Framework zur Objekterzeugung verwendet. Ergo müsste das gesamte Framework auf die neue Version gebracht werden, und das ist nicht möglich. Das was halt funktionieren müsste ist das eben Visual Stuido 2008 nach dem Builden exakt dieselbe dll liefern müsste wie unter 2003.
Und ob sich die Lib und Includes einfach so tauschen lasse werde ich probieren, obwohl ich nach meine momentanen Einschätzung glaube das eben irgendwo "hart" im compiler steht das er die aktuelle MFC verwenden soll..
zu deinem letzten Satz...den verstehe ich nicht ganz...
-
Also ich habe jetzt noch ein wenig rumprobiert, mit den libraries und Include ordnern, aber irgendwie finde ich nicht den richtigen Hebel wo ich das Ganze ansetzen muss, denn es scheint als würde die aktuelle MFC schon durch den Compiler integriert werden...
vielleicht hat jemand ja noch nen Tip!!
mfg crusher..
-
Quark. Die MFC wird ganz normal über Header und Libs gezigen. Wenn Du diese austauscht könnte es gehen.
Nur das ist den Aufwand nicht wert.
Vor allem wenn es um Funktionen geht die nur im Managed-Code verfügbar sind.
-
Ja, bin gerade schon darüber her die Libs zu tauschen und auch die include Folder, leider häufen sich seit dem die Compiler Fehler...
und zu dem warum ich es mache, kann ich nur wiederholen was ich oben schon geschrieben hatte, es handelt sich um ein Thema einer Diplomarbeit, da habe ich wenig Spielraum einfach etwas anderes zu machen, wenn der Augenmerk explizit auf den Testfunktionen von Visual Stuio Team Suite liegt..
Glaub mir, hätte ich eine Wahl, würde ich so nen Mist gar nicht erst anfangen...
-
Was möchtest Du eigetlich. Das Projekt nur in VS 2008 bearbeiten?
Das kannst Du ja.
Kompilieren wird nicht gehen da du ja Bib. hast die gehen eine andere MFC gelinkt wurde.Du kannst es aber versuchen. Einfach das Projekt kopieren und konvertieren.
Das nächste Problem wird aber der C++-Standard sein.
VS 2008 hält sich nun mehr daran und es kommen eben vielleicht viele Fehler. Insbesondere bei Templates.
-
Prinzipiell möchte ich ein bestehendes MFC71-Projekt aus Visual Stuio 2003 in 2008 migrieren. Allerdings dürfen dabei die Standard dlls, also MFC90 und MSVCR90 nicht verwendet werden, statt dessen sollen die aus dem Original Projekt (MFC71) verwendet werden. soweit die Theorie. Ob mir das Ergebnis am Ende etwas nützt kann ich selber noch nicht voraus sagen, denn wie Du bereits sagst weiss ja niemand was sich innerhalb des Compilers noch alles geändert hat, denn an diese Einstellungen komme ich ja gar nicht ran. Sprich mein eigentliches Ziel ist es aus dem 2008er Projekt dieselbe .dll als Ergebnis zu ziehen wie sie aus dem Visual Studio 2003 rausgefallen ist. Ich möchte also unter Visual Studio 2008 eine MFC-Dll bauen die als Grundlage die MFC71 hat.
Muss ehrlich sagen das ich es auch etwas blöd finde das es keine Art "Kompatibilitätsmodus" gibt, den man irgendwo einstellen könnte, für .NET existiert sowas ja auch..
-
Um eine Binärkompatibilität mit VC2003 zu erhalten, müsstest Du zusätzlich auch den Compiler im VC\BIN-Verzeichnis austauschen. Allerdings wird es da beim Aufruf des Compilers einige Warnungen geben, da ja neue Optionen hinzugekommen sind. Den Kompatibilitätsmodus wird es den Ankündigungen nach im nächsten Visual Studio geben, allerdings nur zusammen mit VS2008.
Ich würde versuchen, das ganze Projekt inkl. Framework auf VS2008 zu portieren. Macht sich in einer Diplomarbeit übrigens auch nicht schlecht, wenn es Probleme gibt. Umso einfacher ist es nämlich, die Seiten zu füllen.
-
Die MFC DLLs werden da vermutlich nicht das einzige Problem sein, es gibt ja auch noch die CRT DLLs. Die sind zwischen VC71 und VC90 AFAIK auch nicht kompatibel.
-
Naja, ich werd mich jetzt wieder dahinter klemmen und mein Glück versuchen, bisher hat es nur Fehlermeldungen gehagelt...
@sri
Das gesamten Portieren des gesamten Frameworks, hab ich ja schonmal geschrieben das es nicht geht, der ist halt im Unternehmen wo ich schreibe bei 150 Mann im Einsatz und wird verkauft in alle Welt. Darum ist das leider keine Option. Zumal die Portierung des Framework wahrscheinlich alleine schon den Rahmen einer Diplomarbeit sprengen würde.@hustbaer
Ja die MSVCR muss ich natürlich auch ändern.Falls ihr noch irgendwelche Tips habt, wie man es am Besten angeht, immer her damit...
-
Jetzt habe ich es mittlerweile umgestellt, zumindest denk ich das, ich habe alle Verzeichnisse, abgeändert, so das VS08 auf die ganzen Includes, Libs und Executables aus der Version 2003 zugreift, leider tauchen beim Builden nun 2 Compiler-Warnungen und 1 Link-Fehler auf:
Command line warning D4002 : ignoring unknown option '/errorReport:prompt'
Command line warning D4024 : unrecognized source file type 'ÿþ/', object file assumed
fatal error LNK1181: cannot open input file ' ■/.obj'Mit der ersten Warnung komme ich ja noch klar...ich interpretiere einfach mal das ist nen Parameter, den der VS03 Compiler noch nicht kennt... aber der Rest? Hab auch schon gegoogelt, aber leider nicht die nötigen Hinweise gefunden, sondern meist nur Hinweise auf Commandzeilen, aber im VS selber habe ich nichts gefunden wo sich das abändern ließe. Ich muss zugeben ich bin auch kein informatiker und kenn mich mit der IDE und dem Programmierslang nicht ganz so gut aus.
mfg crusher..
-
Evtl. hat sich der interne Aufbau der temporären dateien geändert, die z.B. der Linker benutzt. Evtl. ist das jetzt UTF-8 und vorher war es simple 8bit char Text.
Schau Dir das Build Log an und analysiere mal die Befehle, die zu dem Fehler führen.
-
okay, ich habe das Build Log jetzt durchgesehen, leider steckt da für mich nicht sehr viel Inhalt drin...ich poste es einfach mal..
Build Log
Build started: Project: TrafficLight, Configuration: Release|Win32
Command Lines
Creating temporary file "c:\Schwarzelt\VAC\2008_Proj\TrafficLight_neu\Release\RSP00000B7202288.rsp" with contents
[
/Ob1 /I "C:\Programme\AIS\VACNT-32.42\System" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXEXT" /D "_VC80_UPGRADE=0x0710" /D "_WINDLL" /D "_AFXDLL" /GF /FD /EHsc /MD /Gy /Yu"stdafx.h" /Fp".\Release\TrafficLight.pch" /Fo".\Release\" /Fd".\Release\vc90.pdb" /W4 /c /Zi .\TrafficLight.CPP.\CTrafficLightPropertyPage2.cpp
.\CTrafficLightPropertyPage.cpp
.\CTrafficLightObject.cpp
.\CTrafficLightModule.cpp
]
Creating command line "cl.exe @c:\Schwarzelt\VAC\2008_Proj\TrafficLight_neu\Release\RSP00000B7202288.rsp /nologo /errorReport:prompt"
Creating temporary file "c:\Schwarzelt\VAC\2008_Proj\TrafficLight_neu\Release\RSP00000C7202288.rsp" with contents
[
/Ob1 /I "C:\Programme\AIS\VACNT-32.42\System" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXEXT" /D "_VC80_UPGRADE=0x0710" /D "_WINDLL" /D "_AFXDLL" /GF /FD /EHsc /MD /Gy /Yc"stdafx.h" /Fp".\Release\TrafficLight.pch" /Fo".\Release\" /Fd".\Release\vc90.pdb" /W4 /c /Zi .\StdAfx.cpp
]
Creating command line "cl.exe @c:\Schwarzelt\VAC\2008_Proj\TrafficLight_neu\Release\RSP00000C7202288.rsp /nologo /errorReport:prompt"Output Window
Compiling...
cl : Command line warning D4002 : ignoring unknown option '/errorReport:prompt'
cl : Command line warning D4024 : unrecognized source file type 'ÿþ/', object file assumed
LINK : fatal error LNK1181: cannot open input file ' ■/.obj'Results
Build log was saved at "file://c:\Schwarzelt\VAC\2008_Proj\TrafficLight_neu\Release\BuildLog.htm"
TrafficLight - 1 error(s), 2 warning(s)okay...und danke für die Unterstützung bisher...
-
Setze in den Konfigurationseigenschaften des Projekts unter "C/++ -> Allgemein" mal "UNICODE-Antwortdateien verwenden" auf "Nein". Das gleiche dann auch beim Linker.
-
Danke sri, das brachte mich wieder ein kleines Stück vorwärts...nach dem Ausbügeln von 2-3 kleineren Sachen schlägt jetzt allerdings erneut der fehlerteufel zu, der Linker kommt mit einigen Anweisungen nicht klar, speziell was das Manifest angeht, diese Sachen werden zwar nur als Warnungen angezeigt, aber die mt.exe wirft dann den Fehler. Hab nochmal das Log angehängt:
Build Log Build started: Project: TrafficLight, Configuration: Debug|Win32
Command Lines Creating temporary file "c:\Schwarzelt\VAC\2008_Proj\TrafficLight_neu\Debug\RSP00001A7203288.rsp" with contents
[
/OUT:"C:\Programme\AIS\VACNT-32.42\System/TrafficLightd.dll" /INCREMENTAL:NO /LIBPATH:"C:\Programme\AIS\VACNT-32.42\System" /DLL /MANIFEST /MANIFESTFILE:".\Debug\TrafficLightd.dll.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Programme\AIS\VACNT-32.42\System/TrafficLightd.pdb" /SUBSYSTEM:WINDOWS /DYNAMICBASE:NO /IMPLIB:".\Debug/TrafficLight.lib" /MACHINE:I386 vacapid.lib".\Debug\CTrafficLightModule.obj"
".\Debug\CTrafficLightObject.obj"
".\Debug\CTrafficLightPropertyPage.obj"
".\Debug\CTrafficLightPropertyPage2.obj"
".\Debug\StdAfx.obj"
".\Debug\TrafficLight.obj"
".\Debug\TrafficLight.res"
]
Creating command line "link.exe @c:\Schwarzelt\VAC\2008_Proj\TrafficLight_neu\Debug\RSP00001A7203288.rsp /NOLOGO /ERRORREPORT:PROMPT"
Creating temporary file "c:\Schwarzelt\VAC\2008_Proj\TrafficLight_neu\Debug\RSP00001B7203288.rsp" with contents
[
/outputresource:"..\..\..\..\Programme\AIS\VACNT-32.42\System\TrafficLightd.dll;#2" /manifest.\Debug\TrafficLightd.dll.intermediate.manifest
]
Creating command line "mt.exe @c:\Schwarzelt\VAC\2008_Proj\TrafficLight_neu\Debug\RSP00001B7203288.rsp /nologo"
Output Window Linking...
LINK : warning LNK4044: unrecognized option '/MANIFEST'; ignored
LINK : warning LNK4044: unrecognized option '/MANIFESTFILE:.\Debug\TrafficLightd.dll.intermediate.manifest'; ignored
LINK : warning LNK4044: unrecognized option '/MANIFESTUAC:level='asInvoker' uiAccess='false''; ignored
LINK : warning LNK4044: unrecognized option '/DYNAMICBASE:NO'; ignored
LINK : warning LNK4044: unrecognized option '/ERRORREPORT:PROMPT'; ignored
Creating library .\Debug/TrafficLight.lib and object .\Debug/TrafficLight.exp
Embedding manifest...
Microsoft (R) Side-By-Side Manifest Tool 1.0.0.0
Copyright (C) Microsoft Corporation 2000-2001. All Rights Reserved.
Modes of operation:
-hashupdate Update hashes of member files
-makecdfs Generate CDF files to make catalogs
-verbose Disply piles of debugging information
Modifiers:
-manifest The name of the manifest to work with
Normal usage: mt.exe -hashupdate -makecdfs -manifest foo.man
Project : error PRJ0002 : Error result 1 returned from 'C:\Programme\Microsoft Visual Studio .NET 2003\Common7\Tools\Bin\winnt\mt.exe'.
Results Build log was saved at "file://c:\Schwarzelt\VAC\2008_Proj\TrafficLight_neu\Debug\BuildLog.htm"
TrafficLight - 1 error(s), 5 warning(s)
-
crushercrusher schrieb:
@hustbaer
Ja die MSVCR muss ich natürlich auch ändern.Und du glaubst dass VC9 Code erzeugen kann der mit der VC71 Runtime-DLL funktioniert? Ich glaub's nicht. Beim DDK Compiler haben die einiges getrickst, damit die EXEn die da rausfallen mit der alten MSVCRT.DLL (von VC6) funktionieren. Würde mich wundern wenn VC9 Kompilate mit der VC71 DLL funktionieren...