Problem mit MFC und VC++ 6.0
-
Hallo Forum,
ich habe des öfteren ein nerviges Problem mit VC++ und MFC.Der folgende Code zeigt das Problem exemplarisch. Das Programm stürzt
beim Beenden _immer_ ab (Meldung: "Problem.exe hat ein Problem festgestellt
und muss beendet werden").Der Code besteht aus zwei C++-Dateien.
Datei1.cpp:
-------------#include <afxtempl.h>
class CProblem
{
public:
static CArray<void*,void*> MyList;
};CArray<void*,void*> CProblem::MyList;
==================================================
Datei2.cpp:
-----------#include <afxdlgs.h>
int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
if (!AfxWinInit(::GetModuleHandle(NULL), NULL,::GetCommandLine(), 0))
{
MessageBox(0,"MFC failed to initialized!",
"Error",MB_OK|MB_TASKMODAL| MB_ICONERROR);
return 1;
}CFileDialog FileDialog(TRUE,".","",OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,
"all (.)|.*||",NULL);FileDialog.DoModal();
return 0;
}Der Absturz erfolgt nur, wenn man die MFC statisch einbindet und
nicht die Debug-Version benutzt.
Es sieht für mich so aus, als würde der Dekonstruktor von
"CArray<void*,void*> CProblem::MyList" das Problem hervorrufen...Allerdings: wenn ich "FileDialog.DoModal();" weglasse, tritt der
Fehler nicht aus!Lustig ist auch: wenn ich die Datei1.cpp durch "Exclude from build"
aus dem Projekt ausschließe, dann ein Rebuild durchführe, dann die Datei1.cpp wieder
einschließe und wieder ein Rebuild durchführe, dann tritt der Fehler
nicht mehr auf. Allerdings: wenn ich VC++ dann schließe und wieder
öffene und nochmal ein Rebuild mache ist der Fehler wieder da!Kann jemand das Problem nachvollziehen? Wie kann man es umgehen?
Vielen Dank für konstruktive Hinweise,
-bep-
-
Was passiert wenn Du Dir den Callstack anzeigen lässt?
Dann weiß Du genau wo es kracht.BTW: Du weiß dass Dein Umgang hier mit der MFC absolut für die Füsse ist...
Die WinMain zu verwenden kein CWinApp Objekt zu haben etc. Das Alles verstösst gegen einiges was die MFC will!