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 confirm� 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
    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
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    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 confirm� 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
    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. 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