'CopyFileEx': undeclared identifier



  • Tja, der Titel sagt eigentlich eh schon alles. Wenn ich im Visual Studio 6.0 Enterprise Edition unter Windows 2000 in VC++ die Funktion CopyFileEx aufrufen möchte, erhalte ich: 'CopyFileEx': undeclared identifier.

    Nachdem ich mit #prgrama message herumgespielt habe, entsteht das Problem in winbase.h bei:

    #if(_WIN32_WINNT >= 0x0400)
    

    Ich habe das Projekt normal mit dem MFC AppWizzard erstellt....

    Wenn ich jetzt ein #define _WIN32_WINNT 0x0500 mache, kennt er zwar die Funktion, liefert mir aber dann eine andere Fehlermeldung im Zusammenhang mit der CallBack-Funktion.

    Da ich mir aber nicht sicher bin, ob das nicht auch damit zusammenhängt, wollte ich jetzt mal fragen, ob wer dafür eine Erklärung hat...es kann ja nicht sein, dass man das selber definieren muss....



  • Also ich denke du musst schon _WIN32_WINNT >= 0x0400 definieren - was für einen Fehler bekommst du damit denn?
    Hast du eine MFC-Anwendung? Wozu ein #prgrama 😕



  • flenders schrieb:

    Also ich denke du musst schon _WIN32_WINNT >= 0x0400 definieren

    0x0500 ist doch aber >= 0x0400, oder? 😉
    Der Fehler ist ja danach auch verschwunden. Jetzt hat er einen fehler in der Signatur der ProgressProc. Aber da man erst was zu sagen, wenn man's gesehen hat.

    Wozu ein #prgrama 😕

    Sagt er doch: Er lässt sich damit Messages ausgeben.



  • OK, das Problem mit der ProgressProc passt auch schon, war nur falsch deklariert.

    Was ich aber nicht verstehe ist, dass man das extra definieren muss, es aber nicht im geringsten in der MSDN erwähnt wird....irgendwie kommt mir da was Misskonfiguriert vor, als hätt ich falsche Project Settings.....



  • Included in Windows XP, Windows 2000 Professional, and Windows NT Workstation 4.0, Windows Me, and Windows 98.
    

    Diese Konstanten müssen auch für manche anderen Sachen definiert werden - und zwar, um neue Funktionen bzw. Strukturen (bzw. Veränderungen an diesen) nutzen zu können - wodurch dann aber die Kompatibilität zum älteren System nicht mehr gegeben ist.



  • flenders schrieb:

    Included in Windows XP, Windows 2000 Professional, and Windows NT Workstation 4.0, Windows Me, and Windows 98.
    

    Diese Konstanten müssen auch für manche anderen Sachen definiert werden - und zwar, um neue Funktionen bzw. Strukturen (bzw. Veränderungen an diesen) nutzen zu können - wodurch dann aber die Kompatibilität zum älteren System nicht mehr gegeben ist.

    Also in meiner - veralteten - MSDN steht dieses "Included in..." nicht drinnen, wäre damals aber auch schon aktuell gewesen?!
    Den Punkt mit der Kompatibilität verstehe ich, was ich nur nicht ganz begreife ist, warum so eine wichtige define-Direktive nicht automatisch gesetzt wird. In winbase.h sind extrem viele Funktionen von diesem define abhängig....und wie gesagt, in meiner MSDN wird so was wichtiges gar nicht erwähnt...

    Naja, halb so schlimm, jetzt gehts ja. Danke für die Hilfe!



  • Das soll ja eben gerade nicht automatisch geschehen, da du dann ja evtl. z.B. keine Anwendungen für Windows 95 schreiben könntest 🙄
    Ich habe das jetzt auch nochmal im der SDK-Doku nachgeschlagen: Using the SDK Headers
    Durch definieren dieser System-Anforderungen ist aber ein Programm ggf. auf älteren Systemen eben nicht mehr lauffähig (was es ohne diese Definition aber ggf. noch gewesen wäre) 🙂


Anmelden zum Antworten