IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[VC6 et MFC] Exception dans MFC42D.dll


Sujet :

MFC

  1. #1
    Membre régulier Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Points : 99
    Points
    99
    Par défaut [VC6 et MFC] Exception dans MFC42D.dll
    Bonjour à tous,

    mon projet fonctionne parfaitement en Release
    en revanche, en Debug, j'ai l'erreur suivante :
    "Unhandled exception in Gavroche.exe (MFC42D.DLL): 0xC0000005: Access Violation"

    puis VC6 me présente l'écran suivant
    http://cjoint.com/?mjkOG0Efeo

    Pourquoi ai-je l'erreur uniquement en Debug ?
    Pourquoi une référence à MFC42D alors qu'on en est à une version bien postérieure il me semble (7.0 non ?) ?
    Et comment corriger ça ?

    Merci d'avance
    Philippe

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,regarde la valeur de this dans ton debug et
    lit ce post dans la faq:
    http://c.developpez.com/faq/vc/?page...gPointeurValue

  3. #3
    Membre régulier Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Points : 99
    Points
    99
    Par défaut
    bonjour,

    l'erreur se produit dans l'InitInstance de ma classe CWinAPP

    this a une valeur "normale" 0x00424C70
    en revanche, m_pMainWnd (ou AfxGetMainWnd() ) sont à 0 !
    donc l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	m_pMainWnd->SetIcon( ::LoadIcon(m_hInstance,MAKEINTRESOURCE(IDI_ICONE_GAVROCHE)),TRUE);
    plante et provoque l'exception.

    Or le code le InitInstance est celui d'origine (créé par Wizard ...) et fonctionne en Release

    Comprends pô
    Philippe

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    tu peux montrer le context d'appel de cette ligne dans initinstance.
    apparemment ton appel est trop tot ...
    note dans ton image this c'etait 0xCDCDCD

  5. #5
    Membre régulier Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Points : 99
    Points
    99
    Par défaut
    tu as raison Farscape
    je reprends :
    ma toute première exception intervient sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	// Dispatch commands specified on the command line
    	if (!ProcessShellCommand(cmdInfo))
    		return FALSE;
    qui donne effectivement this=0xcdcdcdcd

    En supprimant le traitement de la ligne de commande (dont je n'ai pas besoin pour l'instant), l'exception intervient à la ligne suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	m_pMainWnd->SetIcon( ::LoadIcon(m_hInstance,MAKEINTRESOURCE(IDI_ICONE_GAVROCHE)),TRUE);
    avec là this "correct" mais m_pMainWnd à 0

    Voilà pour être clair.

    Le contexte d'appel est issu de Project Wizard :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    BOOL CGavrocheApp::InitInstance() {
    	// Standard initialization
    	// If you are not using these features and wish to reduce the size
    	//  of your final executable, you should remove from the following
    	//  the specific initialization routines you do not need.
     
    #ifdef _AFXDLL
    	Enable3dControls();			// Call this when using MFC in a shared DLL
    #else
    	Enable3dControlsStatic();	// Call this when linking to MFC statically
    #endif
     
    	// Change the registry key under which our settings are stored.
    	// TODO: You should modify this string to be something appropriate
    	// such as the name of your company or organization.
    	SetRegistryKey(_T("Local AppWizard-Generated Applications"));
     
    	LoadStdProfileSettings(3);  // Load standard INI file options (including MRU)
     
    	// Register the application's document templates.  Document templates
    	//  serve as the connection between documents, frame windows and views.
     
    	CSingleDocTemplate* pDocTemplate;
    	pDocTemplate = new CSingleDocTemplate(
    		IDR_MAINFRAME,
    		RUNTIME_CLASS(CGavrocheDoc),
    		RUNTIME_CLASS(CMainFrame),       // main SDI frame window
    		RUNTIME_CLASS(CGavrocheVue));
     
     
    	AddDocTemplate(pDocTemplate);
     
    	// Parse command line for standard shell commands, DDE, file open
    	CCommandLineInfo cmdInfo;
    	ParseCommandLine(cmdInfo);
     
    	// Dispatch commands specified on the command line
    	if (!ProcessShellCommand(cmdInfo))
    		return FALSE;
     
    	pMainWindow =static_cast<CMainFrame *>(AfxGetMainWnd());
     
    		// The one and only window has been initialized, so show and update it.
     
    	m_pMainWnd->SetIcon( ::LoadIcon(m_hInstance,MAKEINTRESOURCE(IDI_ICONE_GAVROCHE)),TRUE);
    	m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);
    	m_pMainWnd->UpdateWindow();
     
     
    	// initialize gdi+
    	Gdiplus::GdiplusStartupInput gdiplusStartupInput;
    	Gdiplus::GdiplusStartup(&m_ulGdiplusToken, &gdiplusStartupInput, NULL);
     
    	hwnd=(HWND)::GetActiveWindow();
        menu=(HMENU)::GetMenu(hwnd);
     
    return TRUE;
    } //proc
    Tu parlais d'appel trop tôt
    Mais en Release ça fonctionne (et en plus ça vient du Wizard, sans modif)

    Merci de ton aide
    Philippe

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    en fait la on regarde l'effet pas la cause ...
    il y a un probleme dans ProcessShellCommand qui fait que la mainframe n'est pas créée d'ou le pointeur null apres...
    donc il faudrait regarder d'un plus pres l'assertion d'erreur provoquée dans
    ProcessShellCommand.
    par exemple ça peut etre du a un controle dans ta view .
    essaye de mettre un point d'arret dans son constructeur et dans OnInitialUpdate.tu y passe ?


  7. #7
    Membre régulier Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Points : 99
    Points
    99
    Par défaut
    j'ai trouvé, je t'en parle tout à l'heure ....

  8. #8
    Membre régulier Avatar de Philippe320
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 179
    Points : 99
    Points
    99
    Par défaut
    Bon en fait, tu m'as bien aiguillé :
    dans le constructeur de ma view, j'avais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //Chargement de l'image de fond
    Bitmap.LoadBitmap(IDB_BITMAP2); // lecture bitmap dans les ressources
    Bitmap.GetBitmap(&InfosBmp);
    MemDC.CreateCompatibleDC(pDC);// creation d'un DC en memoire
    MemDC.SelectObject(&Bitmap); // selection du bitmap dans le DC en memoire
    je ne sais pas pourquoi, mais c'est ça qui plante en Debug (et pas en Release, ça j'aimerais bien comprendre)

    C'est sans doute trop tôt
    j'essaierai de le mettre dans le InitialUpdate par exemple

    Merci
    Philippe
    (au fait, as-tu reçu mon email sur la fonction Rechercher ?)

  9. #9
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    c'est la création des dc dans le constructeur qui cause un probleme.
    (mail ?,mp oui mais pas eu trop le temps de repondre lol )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exception dans kernel32.dll qui freeze mon programme
    Par Chekov dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 30/03/2009, 13h59
  2. Intégration d'une application MFC MDI dans une DLL
    Par AYARA Adel dans le forum MFC
    Réponses: 3
    Dernier message: 03/03/2008, 20h11
  3. Creation d'un message dans une dll non MFC
    Par dug dans le forum Windows
    Réponses: 1
    Dernier message: 29/11/2005, 12h50
  4. [MFC][DLL]Dialog Avec ActiveX dans une DLL ?
    Par matazz dans le forum MFC
    Réponses: 1
    Dernier message: 16/05/2005, 16h36
  5. gestionnaire d'Exception dans DLL
    Par pirbd dans le forum Langage
    Réponses: 2
    Dernier message: 03/03/2005, 18h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo