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

 C Discussion :

Windows: problème avec PrintDlg()


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 785
    Par défaut Windows: problème avec PrintDlg()
    Bonjour à tous,

    Comme le dit le titre, j'ai un problème avec la fonction PrintDlg(). Celle-ci me renvoie systématiquement 0, avec un extended return code de 1, qui signifie que j'ai mal renseigné la taille de la structure passée en paramètre.

    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	PRINTDLG pdlg;
     
    	setmem(&pdlg,sizeof(PRINTDLG),0);
    	pdlg.lStructSize=sizeof(pdlg);
    	rc=PrintDlg(&pdlg);
    	if(rc==0) printf("Printdlg returns 0, extended error code is %d\n",CommDlgExtendedError());
    Pour info,
    CommDlgExtendedError()
    Structure PRINTDLG
    PrintDlg()

    En espérant que quelqu'un ait une idée.... Merci d'avance.

    Edgar;

    PS: je suis sous win7, mais la même erreur survient sous xp (machine virtuelle)

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Salut
    C'est bizarre que tu doives stocker la taille de ta structure dans un de ses membres vu que la taille est facilement récupérable via sizeof() quand on en a besoin. J'ai pensé que tu t'étais trompé sur ce champ mais différents exemples du net m'ont montré que c'était ainsi donc je reste sur mon étonnement mais j'admets que c'est comme ça.
    Ceci dit, toi tu mets tous les autres champs à 0 alors qu'ici il y a un exemple détaillé dans lequel il est mentionné d'autres champs à remplir avec certaines valeurs...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 785
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    C'est bizarre que tu doives stocker la taille de ta structure dans un de ses membres vu que la taille est facilement récupérable via sizeof() quand on en a besoin.
    Oui, je suis d'accord avec toi, mais la plupart des structures (windows) passées à des fonctions de l'api windows, doivent avoir leur taille renseignée dans (je pense) le premier membre.... va savoir pourquoi....

    Si tu as des exemples complets sur le net (et pourtant j'ai cherché!), stp donne-moi les url --> sorry, je n'avais pas vu que c'était un lien. Je vois ça cette nuit et reposte....

    Merci de ta réponse,

    Edgar;

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 109
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    C'est bizarre que tu doives stocker la taille de ta structure dans un de ses membres vu que la taille est facilement récupérable via sizeof() quand on en a besoin.

    http://blogs.msdn.com/b/oldnewthing/.../12/56061.aspx

  5. #5
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 785
    Par défaut
    Hello à tous,

    Merci, magma, pour ta piste.

    J'ai fini par trouvé la solution (très vilaine, mais elle ne doit fonctionner que sur mon pc et celui de mon épouse (win7 64bits))

    Ayant ras-le-bol de tâtonner, j'ai écrit ce bout de code, jusqu'au moment où j'ai eu la fenêtre de choix devant les yeux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	setmem(&pdlg,sizeof(PRINTDLG),0);
    	pdlg.lStructSize=0;
     
    	do {
    		rc=PrintDlg(&pdlg);
    		if(rc==0) printf("Printdlg returns 0, extended error code is %d," ,CommDlgExtendedError());
    		printf("lstructsize=%d\n",pdlg.lStructSize);
    		pdlg.lStructSize++;
    	} while (rc==0);
    Il s'avère que si sizeof(PRINTDLG) renvoie 68, c'est 66 qu'il faut mettre dans lStructSize.... que je vais hardcoder! Si quelqu'un a une explication, je suis preneur....

    Merci à ceux qui ont lu ce post,

    Edgar;

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par edgarjacobs Voir le message
    Il s'avère que si sizeof(PRINTDLG) renvoie 68, c'est 66 qu'il faut mettre dans lStructSize...
    Impressionnant. Et si tu essayais de continuer ta boucle avec 67, 68, 69, 70, 71, ... pour voir si ça fonctionne avec d'autres valeurs ?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 785
    Par défaut
    Hello Sve@r,

    Merci de ton attention.

    Citation Envoyé par Sve@r Voir le message
    Impressionnant. Et si tu essayais de continuer ta boucle avec 67, 68, 69, 70, 71, ... pour voir si ça fonctionne avec d'autres valeurs ?
    Testé jusqu'à 1000: chnol ! Il n'y a que 66 qui fonctionne.... et heureusement que 666 ne fonctionne pas, ça foutrait la trouille !

    A+

    Edgar;

    EDIT: petit oubli: Joyeux Noël à tous !

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

Discussions similaires

  1. %display %window problème avec %if %then
    Par L0007 dans le forum SAS AF et formulaires
    Réponses: 2
    Dernier message: 24/10/2011, 13h03
  2. [Code::Blocks/Windows]Problème avec les thèmes GTK+
    Par 3alaovic dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 16/09/2009, 20h02
  3. [Installation] [Windows] Problème avec notepad
    Par kamy86 dans le forum Subversion
    Réponses: 1
    Dernier message: 26/02/2009, 11h42
  4. [Pthreads/Windows] Problème avec pthread_t
    Par dapounet dans le forum POSIX
    Réponses: 18
    Dernier message: 22/10/2008, 22h01
  5. Service Windows : problème avec état du service
    Par dlayla4 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 23/05/2008, 09h35

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