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

Visual C++ Discussion :

error sur appel CView::OnFilePrint()


Sujet :

Visual C++

  1. #1
    Membre régulier Avatar de gijy
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 136
    Points : 83
    Points
    83
    Par défaut error sur appel CView::OnFilePrint()
    Bonjour à tous;

    Je suis en train de remanier un programme en MFC sous Visual studio 2008.
    pour cela j'ai créé une copie du projet d'origine et apporté mes modifs et implementation de fonctions.

    Depuis j'ai une erreur à l'appel de OnFilePrint(), or je n'ai pas touché à cette partie du code qui est identique à l'original (qui fonctionne lui)!!!

    ci joint le bout de soft
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	switch (_n)
    	{
    		case 0 : // impression
    			CView::OnFilePrint();
    			break;
    en pas à pas les 2 codes s'execute de la meme facon
    apparition de la boite de dialogue d'impression, choix de l'imprimante.... et au moment de cliquer sur OK
    j'ai une belle fenetre pop up qui apparait (sur la version modifie) du style

    Debug Assertyion Failed!
    Program: blablabla\mfc\viewprnt.cpp
    line:120
    For information............etc

    Là je choisi de continuer et une 2eme fenetre apparait
    "Un argument non valide a été détecté."

    Le code etant identique en tout point entre les 2, j'ai commencé par les propriété du projet; mais je n'ai vu aucune difference........
    du coup je suis completement sec sur le sujet
    quelqu'un a t il une idées?
    Il n'y a pas eu d'implementation de la charpente MFC et le message apparait avant de revenir dans mon code!!!!!

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Va voir dans les sources de MFC (fournies par l'installeur de Visual) pour connaître le contenu de l'assertion qui échoue.

    Edit: En ouvrant C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\src\mfc\viewprnt.cpp, j'ai droit à une assertion dans cette fonction:
    Code C++ : 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 CView::DoPreparePrinting(CPrintInfo* pInfo)
    {
    	ASSERT(pInfo != NULL);
    	ASSERT(pInfo->m_pPD != NULL);
     
    	if (pInfo->m_pPD->m_pd.nMinPage > pInfo->m_pPD->m_pd.nMaxPage)
    		pInfo->m_pPD->m_pd.nMaxPage = pInfo->m_pPD->m_pd.nMinPage;
     
    	// don't prompt the user if we're doing print preview, printing directly,
    	// or printing via IPrint and have been instructed not to ask
     
    	CWinApp* pApp = AfxGetApp();
    	if (pInfo->m_bPreview || pInfo->m_bDirect ||
    		(pInfo->m_bDocObject && !(pInfo->m_dwFlags & PRINTFLAG_PROMPTUSER)))
    	{
    		if (pInfo->m_pPD->m_pd.hDC == NULL)
    		{
    			// if no printer set then, get default printer DC and create DC without calling
    			//   print dialog.
    			if (!pApp->GetPrinterDeviceDefaults(&pInfo->m_pPD->m_pd))
    			{
    				// bring up dialog to alert the user they need to install a printer.
    				if (!pInfo->m_bDocObject || (pInfo->m_dwFlags & PRINTFLAG_MAYBOTHERUSER))
    					if (pApp->DoPrintDialog(pInfo->m_pPD) != IDOK)
    						return FALSE;
    			}
     
    			if (pInfo->m_pPD->m_pd.hDC == NULL)
    			{
    				// call CreatePrinterDC if DC was not created by above
    				if (pInfo->m_pPD->CreatePrinterDC() == NULL)
    					return FALSE;
    			}
    		}
     
    		// set up From and To page range from Min and Max
    		pInfo->m_pPD->m_pd.nFromPage = (WORD)pInfo->GetMinPage();
    		pInfo->m_pPD->m_pd.nToPage = (WORD)pInfo->GetMaxPage();
    	}
    	else
    	{
    		// otherwise, bring up the print dialog and allow user to change things
    		// preset From-To range same as Min-Max range
    		pInfo->m_pPD->m_pd.nFromPage = (WORD)pInfo->GetMinPage();
    		pInfo->m_pPD->m_pd.nToPage = (WORD)pInfo->GetMaxPage();
     
    		if (pApp->DoPrintDialog(pInfo->m_pPD) != IDOK)
    			return FALSE;       // do not print
    	}
     
    	ASSERT(pInfo->m_pPD != NULL);
    	ASSERT(pInfo->m_pPD->m_pd.hDC != NULL);
    	if (pInfo->m_pPD->m_pd.hDC == NULL)
    		return FALSE;
     
    	pInfo->m_nNumPreviewPages = pApp->m_nNumPreviewPages;
    	ENSURE(pInfo->m_strPageDesc.LoadString(AFX_IDS_PREVIEWPAGEDESC)); //LA LIGNE 120 EST ICI
    	return TRUE;
    }
    C'est l'appel à LoadString(AFX_IDS_PREVIEWPAGEDESC) qui échoue. J'ignore si cette chaîne doit être définie dans le programme appelant ou si elle est censée être dans les DLLs de MFC (une recherche dans les headers suggère le second cas: afxprint.rc contient la ligne AFX_IDS_PREVIEWPAGEDESC, "Page %u\nPages %u-%u\n"). Mais dans le premier cas, ça veut dire qu'il faudrait que tu rajoutes une description dans tes ressources, pour la boîte de dialogue d'aperçu avant impression.

    Une petite recherche sur le net de AFX_IDS_PREVIEWPAGEDESC montre que tu n'es pas le premier à avoir cette erreur.
    Apparemment, il faut manuellement rajouter un #include "afxprint.rc" dans ton script de ressources.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre régulier Avatar de gijy
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 136
    Points : 83
    Points
    83
    Par défaut
    Bingo!!
    effectivement en comparant les 2 fichier ressource app.rc
    l'include #include "l.FRA\\afxprint.rc" avait disparu!!!
    reinsertion, nettoyage de l'appli, recompilation ....
    Et miracle tout refonctionne correctement

    Grand merci à Medinoc

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

Discussions similaires

  1. [ByRef Error] Erreur Bizarre sur appel de sub
    Par |DUCATI| DesMo dans le forum VBA Access
    Réponses: 1
    Dernier message: 21/05/2007, 11h10
  2. BUILD ERROR sur création d'un projet multi-modules
    Par elitost dans le forum Maven
    Réponses: 1
    Dernier message: 28/08/2006, 15h23
  3. bus error sur une machine SUN
    Par mhtrinh dans le forum C
    Réponses: 14
    Dernier message: 10/07/2006, 16h43
  4. [Access] Ne pas montrer #Error sur un rapport Access
    Par nico33307 dans le forum Access
    Réponses: 3
    Dernier message: 22/09/2005, 23h19

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