MFC Klassen in CLR Projekt verwenden?
-
Ist es möglich, MFC Code in einem Windows Forms Projekt so einzubinden, dass er lauffähig ist?
Ich habe nämlich ein altes MFC Projekt, das ich auf .NET portieren und im ersten Schritt nur die Visualisierung ändern möchte.
Jetzt habe ich mir eine mfc.h Headerdatei gebaut, die wichtige defines und includes enthält:#ifndef WINVER // Lassen Sie die Verwendung spezifischer Features von Windows XP oder später zu. #define WINVER 0x0501 // Ändern Sie den entsprechenden Wert, um auf andere Versionen von Windows abzuzielen. #endif #define _AFXDLL #include <afxwin.h> #include <afxmt.h> //für Critical Section
Diese Headerdatei include ich in allen CPP Dateien am Anfang, die MFC Klassen enthalten. Zusätzlich habe ich das Projekt von /clr:pure auf /clr umgestellt. Das funktioniert soweit, das Projekt läßt sich kompilieren und erstellen.
Jetzt habe ich folgendes Problem: Beim Debuggen bekomme ich die Fehlermeldung Debug Assertion failed: expression _CrtIsValidHeapPointer(pUserData).
Das deuted darauf hin, dass ein Pointer nicht richtig erzeugt wurde oder ins Nirwana zeigt. Der Pointer liegt aber nicht im eigenen Code, sondern in dbgheap.c.Was tun? Denn Debuggen möchte ich eigentlich schon, außerdem wird die Release Version auch instabil sein.
-
Du musst in allen EXEn/DLLs die DLL-Version der CRT/MFC verwenden, dann sollte es keine Probleme geben...
-
Wenn das heißt, dass damit die Einstellung "MFC in einer öffentlichen DLL verwenden" gemeint ist, hat das leider zu keiner Änderung geführt. Der Debug Assertion Failure tritt immer noch auf.
-
So wie es aussieht, handelt es sich um einen Bug.
Einen Workaround gibts unter:
http://www.thescripts.com/forum/thread470901.html
-
Es scheint so, als wäre ich ziemlich vergesselich... hab den Workaround ja selber gepostet
Also: siehe oboger Link ganz unten...Siehe auch:
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=99715http://connect.microsoft.com/VisualStudio/feedback/Workaround.aspx?FeedbackID=99715