MFC Version von Hand ändern


  • Mod

    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..


  • Mod

    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...



  • Also das "glauben" hat damit nicht viel zu tun...ich versuche es einfach, denn wie schon geschrieben, ich bin kein informatiker und kenne mich mit den Compiler, Linker und sonstigen Abläufen nicht wirklich gut aus.

    Als ich die Aufgabe angetreten habe, wusste ich auch nicht wie tief ich in die MFC-Sache hinein muss...denn im Prinzip ist das ja nur ne Nebensache von der ich erst im Nachhinein erfahren habe, das sie zu Problemen führt.



  • Klar, probier es. Wollte dich nur vorwarnen sozusagen.
    Und schreib hier rein ob's funktioniert hat, und was du alles anstellen musstest damit es geht.



  • Deaktiviere mal die Manifestgeneration in den Projekteigenschaften unter "Linker -> Manifestdatei".



  • Okay...danke sri das hat geholfen...hätte man auch mal selbst drauf kommen können...*am Kopf kratz*

    Es lässt sich jetzt kompilieren und builden und am Ende entsteht eine .dll die nur Abhängigkeiten zu MFC71 und MSVCR71 hat, also genau was ich wollte...Intern scheint sich jedoch auch einiges anders zu Verhalten, die neue Datei ist ca. 1KB größer als die aus 2003 und verwehrt leider immer noch den Dienst unter dem verwendeten Framework.

    Aber ich habe soeben mit meiner Betreuerin gesprochen und diese Problematik wird jetzt erstmal hinten angestellt, da sie eigentlich nicht Teil meiner Aufgabe ist.

    Und nun noch zu dem was ich angestellt habe um das Ziel zu erreichen, ich habe sämtliche Folder unter Tools->Options->Projects and Solutions->VC++ Directories auf den Stand von 2003 gebracht. Dann die Unicode Einstellung unter Project-Properties->C/C++->Use Unicode Response auf "Nein" gestellt, und das Manifest-file abgeschaltet..

    Danke für die Hilfe erstmal..und gratulation zum tollen Forum..


Anmelden zum Antworten