Migration eines VS2005 Projekts auf VS2017



  • Hallo zusammen,

    ich weiss, es gibt einige Artikel dazu im Netz.
    Aber die habe ich schon gelesen und die Anweisungen ausprobiert.
    Ich stecke immernoch fest.

    Es kommt die Fehlermeldung:
    "fatal error C1189: #error: MFC does not support WINVER less than 0x0501"

    Ich habe schon versucht, das Projekt über den Zwischenschritt mit VS2010 zu portieren.
    Das hat geklappt!
    Ich habe natürlich in den Projekt Einstellungen unter "Präprozessor"
    auf "_WIN32_WINNT=0x0601" eingestellt, obwohl es auf 501 stand und der Fehler sich auf "< 501" bezieht.
    Im ganzen Projekt ist auch nirgends "WINVER" oder "_WIN32_WINNT" definiert, ausser im Präprozessor.
    Und wenn ich es in die stdafx.h eintrage, auch nicht.

    Mehr Infos habe ich im Netz leider nicht finden können.

    Kann mir bitte jemand helfen!
    Was habe ich vergessen?

    Grüsse
    Helmut





  • Vielen Dank für die schnelle Antwort,

    dieser Artikel gehört auch zu denen, die ich schon gelesen und ausprobiert habe.
    Der Vollständigkeit wegen habe ich nun auch in der stdafx.h ein vorgeschaltetes "#undef" probiert.

    Hier hat sich tatsächlich etwas geändert!
    Ich hab diese Fehlermelungen immernoch. Aber es sind wesentlich weniger geworden.

    Das würde eigentlich bedeuten, dass ein altes WINVER Macro doch noch irgendwo aktiv sein müsste.
    Aber wo?

    Grüsse
    Helmut


  • Mod

    Einfach vor allem definieren und schauen was passiert.

    Ansonsten Präprozessor Ausgabe erzeugen lassen.



  • Hallo Martin,

    habe ich gemacht!
    Es hat geholfen.
    Das Teil lässt sich nun erstellen.

    Nur ist nun meine Frage:
    Wo sind diese alten "#defines" dann noch vorhanden, wenn ich sie nirgends finden kann?

    Danke und Grüsse
    Helmut


  • Mod

    Das musst Du selber sehen. irgendwo wird es etwas geben wie ein #ifndef WINVER...

    Das kann in irgendeiner Deines verwendeten Codes sein.
    Das musst Du schon selber finden....



  • elmut19 schrieb:

    Wo sind diese alten "#defines" dann noch vorhanden, wenn ich sie nirgends finden kann?

    Warnt dein Compiler nicht wegen einer "macro redefinition"?



  • Ja, Abfragen auf diese "#define"´s habe ich wenige gefunden.
    "#if(WINVER >= 0x0400)" zwei mal, im eigenen Quellcode. Sonst nichts.

    Nur im Präprozessor gab es die Einstellung "_WIN32_WINNT 0x0501".
    Und die hatte ich auf "601 geändert.

    Die Fehlermeldung bezog sich aber immer auf "< 501", gemäss obiger Aussage des Compilers.
    Und das war ja nicht die Einstellung!

    Und eine Warnung wegen Redefinition gab es natürlich, bevor ich das "#undef" davor gesetzt hatte.
    Aber das zugehörige "#define" habe ich nicht gefunden.
    Eigentlich hätten auch die ganzen Bibliotheksfunktionen auf VS2017 umgestellt werden sollen.



  • elmut19 schrieb:

    Und eine Warnung wegen Redefinition gab es natürlich, bevor ich das "#undef" davor gesetzt hatte.
    Aber das zugehörige "#define" habe ich nicht gefunden.

    Mein VS2015 sagt:

    X:\projekte\test\test.cpp(49): warning C4005: 'NOMINMAX': macro redefinition
    1>         X:\projekte\test\stdafx.h(34): note: see previous definition of 'NOMINMAX'
    

    Weist mich also direkt zur vorherigen Definition.



  • Ja, genau sowas kommt bei mir nicht.
    Er sagt zwar was von "Neudefinition" aber ....
    So sieht sie aus:

    1>D:\Workspace\Source\MyPrg_VS2017\MyPrgWin32\stdafx.h(12): warning C4005: "_WIN32_WINNT": Makro-Neudefinition
    1>D:\Workspace\Source\MyPrg_VS2017\MyPrgWin32\stdafx.h(12): note: Befehlszeilenargumente: siehe vorherige Definition von "_WIN32_WINNT"

    Der Verweis zur alten Definition verweist auf die Neudefinition!



  • 1>D:\Workspace\Source\MyPrg_VS2017\MyPrgWin32\stdafx.h(12): note: Befehlszeilenargumente: siehe vorherige Definition von "_WIN32_WINNT"


  • Mod

    In anderen Worten, die Compiler Einstellungen in Deinem Projekt!



  • An den Projekteinstellungen scheint Microsoft Einiges verändert zu haben.
    Einige von MS vordefinierte Pfade wurden wohl verändert, da auch exe-Datei und
    obj irgendwo anders gelandet sind und ich ein paar davon verändern musste, damit
    ich überhaupt ein halbwegs lauffähiges Programm erzeugen konnte.
    Bis VS 2010 hat jedenfalls alles noch funktioniert.

    Aber ich habe ja auch noch ein anderes Problem. - Im nächsten Thread.
    An den Compilereinstellungen muss ich dann wohl noch einige Tage arbeiten.

    Vielen Dank nochmal
    Grüsse
    Helmut


Anmelden zum Antworten