Komfortabler Dateimanager mit vielen Funktionen

MFC 8.0 für Visual C++ 6

By Sven on 08.12.2006 - 18:49 in Visual Studio 6

Damit auch andere VC6-Entwickler in den Genuss der MFC 8.0 kommen können, habe ich mit Hilfe des Patch Makers vom Clickteam die Änderungen zusammengefasst und als Download zur Verfügung gestellt. Voraussetzung für die Installation des Patches ist eine Kopie des Original-atlmfc-Verzeichnisses von Visual Studio 2005 und das Platform SDK vom Februar 2003. Neuere Versionen des Platform SDKs funktionieren nicht, da der VC6 mit den Lib-Dateien nichts mehr anfangen kann.

Alle Änderungen sind mit Ausnahme der Ersetzungen von throw(…) und __interface mit dem Kürzel SR: dokumentiert und insgesamt auch noch einmal in der Datei changelog.txt aufgelistet.

Exemplarische Vorgehensweise:
  1. Originales atlmfc-Verzeichnis aus VS2005 nach [VS6]\VC98 kopieren
  2. Patch ausführen und [VS6]\VC98\atlmfc als Produktverzeichnis auswählen
  3. Pfadangaben in [VS6]\VC98\atlmfc\src\vcvars32.bat anpassen (VSCommonDir, MSDevDir, MSVCDir, PSDK)
  4. Modulnamen MyMfc80 für die eigene MFC in [VS6]\VC98\atlmfc\src\makemfx.bat, [VS6]\VC98\atlmfc\include\afx.h und [VS6]\VC98\atlmfc\src\nolib.cpp anpassen
  5. Eingabeaufforderung öffnen und nach [VS6]\VC98\atlmfc\src wechseln
  6. Umgebungsvariablen initialisieren (vcvars32.bat)
  7. Statische ATL erstellen (makeatl.bat)
  8. MFC erstellen (makemfc.bat)
  9. Lib-Dateien aus [VS6]\VC98\atlmfc\lib\Intel nach [VS6]\VC98\atlmfc\lib kopieren
  10. Pfadangaben zur MFC im Developer Studio anpassen
Hinweise
  1. Die ATL steht nur als statische Bibliothek zur Verfügung, die ATL-Server-Klassen sowie alle Headerdateien in [VS6]\VC98\atlmfc\include\! können nicht verwendet werden.
  2. Die WinForms-Erweiterungen können natürlich auch nicht verwendet werden.
  3. Die Klassen für den Zugriff auf Datenbanken (OLEDB und DAO) wurden von mir nicht getestet.
  4. Die Benutzung geschieht auf eigene Gefahr, ich übernehme keine Verantwortung für eventuelle Probleme.
  5. Die Verwendung der MFC 8.0 für Visual C++ 6 ist lizenzrechtlich nur Entwicklern gestattet, die auch die entsprechende Lizenz für Visual Studio 2005 erworben haben.

Es gibt 2 Kommentare zu diesem Beitrag

Trackback URL | RSS-Feed für Kommentare

  1. Kay sagt:

    Hi Svenni 🙂

    Hab das mal bei meinem 135k Zeilen Projekt “Q8Tool” ausprobiert:

    MFC und ATL konnte ich problemlos kompilieren, es gab jedoch ein paar Warnings (“makemfc.bat 1>makemfc.log 2>makemfc.err”).
    In makemfc.log findest Du dann u.A.:
    -LINK : warning LNK4078: multiple “.text” sections found with different attributes (40000040)
    -mfcdload.lib(advapi.obj) : warning LNK4099: PDB “atldload.pdb” was not found with “E:\VStudio\VC98\LIB\mfcdload.lib” or at “E:\VStudio\VC98\atlmfc\src\MFC\INTEL\atldload.pdb”; linking object as if no debug info

    Das ist sicherlich nicht tragisch.

    Bis auf zwei Fehler konnte ich alles durch Umstellen von Datentypen bewerkstelligen:
    #if _MFC_VER< =0x600 #define FILEPOS DWORD #define FILELEN DWORD #define genericFileException CFileException::generic #else #define FILEPOS ULONGLONG #define FILELEN ULONGLONG #define genericFileException CFileException::genericException #endif Was aber für mich bisher nicht sauber lösbar scheint ist der rege Gebrauch von "__if_exists", "__if_not_exists" und ähnlichem in diversen ATL Include Dateien, das der VC6 Compiler nicht unterstützt. Bei mir funktionieren deshalb die ATL Makros "BEGIN_CONNECTION_POINT_MAP" und "END_CONNECTION_POINT_MAP" nicht. Ich habe "__if_exists" und "__if_not_exists" in den beiden Macros geändert, musste noch mein selbstgestricktes Free_Threaded "IConnectionPointImpl" anpasse, weil in ATL8 CComDynamicUnkArray::GetUnknown und CComDynamicUnkArray::GetCookie keine statischen Methoden mehr sind. Der Compiler läuft jetzt mit Q8Tool sauber durch. :mrgreen:
    Falls noch Seltsames auftritt, melde ich das hier 😉

  2. Sven sagt:

    Die Linker-Warnungen beim Kompilieren haben bei mir bisher auch noch keine negativen Seiteneffekte erzeugt. Sofern man seine Programme sowohl mit der MFC 6 als auch mit der MFC 8 verwenden will, muss man wirklich aufpassen. Die MFC 6 ist an einigen Stellen noch auf 32-bit begrenzt (z.B. Dateizugriff in CFile). Auch die Funktionsdeklaration von CWnd::OnNcHitTest hat sich geändert.

    Die neuen Schlüsselwörter in der ATL sind wirklich problematisch, teilweise hängen Compiler-Funktionen und ATL-Konstrukte auch arg miteinander zusammen. Bei ATL-COM-Servern muss man auch zwingend weiterhin die BEGIN_OBJECT_MAP/END_OBJECT_MAP-Makros verwenden, das automatische Einsammeln der Objekte funktioniert aufgrund des alten Compilers nicht.

    Bei mir wurden die größten Probleme aber schon mit dem Umstieg auf die MFC 7 abgestellt, so dass ich meine Projekte ohne wesentliche Fehlermeldungen auch auf die MFC 8 umstellen konnte.

Top