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 :

Problème "ON_CONTROL_RANGE" mode release


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 39
    Points : 34
    Points
    34
    Par défaut Problème "ON_CONTROL_RANGE" mode release
    Bonsoir.
    J'ai créé dynamiquement dans une boite de dialogue des checkbox dont j'ai spécifié les IDs pour pouvoir detecter un clic a l'aide de la macro "ON_COMMAND_RANGE".
    En Debug l'appuie sur tel ou tel checkbox appel une fonction qui va griser un colonne spécifiée d'un tableau, enfin bon tout marche nikel. Sauf que aujourd'hui j'ai essayé en Release et la surprise lors de l'appuie sur une checkbox on voit bien la colonne ciblée qui se grise et aussitôt apres tout se ferme et un message "Access violation" apparait.
    J'ai testé en mettant en commentaire le code de la fonction appelée et ça marche pas mieux. j'en est deduis que ça venais pas de là, j'ai aussi vu que ma boite de dialogue s'ouvrait et se fermait sans problème si l'on appuie pas sur une checkbox. Et j'ai même testé en remplaçant ma macro par un bouton sur lequel j'appuie pour appeler la fonction et là ça marche très bien.
    Mon erreur est donc liée il me semble a cette macro "ON_COMMAND_RANGE" et je me demandais si il n'y aurait pas quelques subtilitées dans son utilisations qui ne serait pas explicitées dans la FAQ.

    Si quelqu'un pense avoir une idée je suis preneur.
    Merçi d'avance.

  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,
    il faudrait voir ton code , et surtout la ligne de code MFC ou il y a l'assertion d'erreur.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    Alors ma macro:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    BEGIN_MESSAGE_MAP(CDlg_Parametre, CDialog)
    	//{{AFX_MSG_MAP(CDlg_Parametre)
    	ON_BN_CLICKED(IDC_EGALISER, OnEgaliser)
    	ON_BN_CLICKED(IDC_IGNORER, OnIgnorer)
    	ON_BN_CLICKED(IDC_REPARTITION, OnRepartition)
    	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
    	//}}AFX_MSG_MAP
    	ON_CONTROL_RANGE(BN_CLICKED , 4100,4200, OnCheck)
     
    END_MESSAGE_MAP()
    La fonction OnCheck:
    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
    void CDlg_Parametre::OnCheck() 
    {
     
    for(int j=0;j<dimj;j++)
    	{
    	(*lResCol[j])=(*m_checkCol[j]).SendMessage(BM_GETCHECK,0,0);
    	if((*lResCol[j])==BST_CHECKED)
    		{
    		m_tabMachines.SetCol(j+1);
    		local_mach_hors_opti[j]=1;
    		for(int i=0;i<dimi;i++)
    			{
    			m_tabMachines.SetRow(i+1);
    			m_tabMachines.SetCellBackColor(8421504);		//grise la ligne
    			}
    		}
    	else
    		{
    		m_tabMachines.SetCol(j+1);
    		local_mach_hors_opti[j]=0;
    			for(int i=0;i<dimi;i++)
    				{
    				m_tabMachines.SetRow(i+1);
    				(*lResLigne[i])=(*m_checkLigne[i]).SendMessage(BM_GETCHECK,0,0);
    				if(lResLigne[i]==BST_UNCHECKED)
    					m_tabMachines.SetCellBackColor(0);
    				}
    		}
    	}
     
    for(int i=0;i<dimi;i++)		
    	{
    	(*lResLigne[i])=(*m_checkLigne[i]).SendMessage(BM_GETCHECK,0,0);
    	if((*lResLigne[i])==BST_CHECKED)
    		{
    		m_tabMachines.SetRow(i+1);
    		local_plage_hors_opti[i]=1;
    		for(int j=0;j<dimj;j++)
    			{
    			m_tabMachines.SetCol(j+1);
    			m_tabMachines.SetCellBackColor(8421504);		//grise la colonne
    			}
    		}
    	else
    		{
    		m_tabMachines.SetRow(i+1);
    		local_plage_hors_opti[i]=0;
    			for(int j=0;j<dimj;j++)
    				{
    				m_tabMachines.SetCol(j+1);
    				(*lResCol[j])=(*m_checkCol[j]).SendMessage(BM_GETCHECK,0,0);
    				if((*lResCol[j])==BST_UNCHECKED)
    					m_tabMachines.SetCellBackColor(0);	
    				}
    		}	
    	}
    }
    et apres le message d'erreur il m'envoie dans le code assembleur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       0012F481   stc
       0012F482   adc         al,byte ptr [eax]
       0012F484   add         al,10h
       0012F486   add         byte ptr [eax],al
    -->0012F488   lods        byte ptr [esi]
       0012F489   hlt
       0012F48A   adc         al,byte ptr [eax]
       0012F48C   fdivr       qword ptr [esi+10046C22h]
       0012F492   add         byte ptr [eax],al
    Je sens que je suis mal barré.

  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
    salut,
    un message ON_CONTROL_RANGE doit avoir un argument dans la fonction de réponse, voir faq:
    http://c.developpez.com/faq/vc/?page...MultiChangEdit

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    Ah ouai j'avais pas fait attention, merçi ça marche nikel. Toute mes excuses.
    Euh juste par curiosité pourquoi en Debug ça marchait?

  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
    ce n'est parce que ça ne plante pas que ça fonctionne correctement;
    en debug tu as plus de place pour déborder en mémoire, le bug peut passer inapercu jusqu'au test en release.

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

Discussions similaires

  1. Problème de mutex en mode release
    Par fredppp dans le forum C++/CLI
    Réponses: 3
    Dernier message: 05/11/2010, 20h26

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