[C++] StartDoc / EndDoc

StartDoc / EndDoc [C++] - C++ - Programmation

Marsh Posté le 06-08-2002 à 17:28:56    

:hello:
 
J'ai un plantage lors de l'appel de EndDoc et je sais pas d'ou ca vient.
J'ai le droit a un :

First-chance exception in Program.exe (NTDLL.DLL): 0xC0000008: Invalid Handle


 
Voici mon code
 

Code :
  1. if (LOWORD(wParam) == IDC_PRINT)
  2.  {
  3.   char bufReport[20000] = {0};
  4.   GetDlgItemText(hDlg, IDC_REPORT, bufReport, 19999);
  5.   CPrintDialog printDlg(false);
  6.   CDC pd;
  7.   DOCINFO di;
  8.   if (printDlg.DoModal() == IDCANCEL)
  9.    return true;
  10.   pd.Attach(printDlg.GetPrinterDC());
  11.   pd.m_bPrinting = true;
  12.   memset(&di, 0, sizeof(DOCINFO));
  13.   di.cbSize = sizeof(DOCINFO);
  14.   di.lpszDocName = "EANCOM order report";
  15.   di.lpszOutput = (LPTSTR) NULL;
  16.   di.lpszDatatype = (LPTSTR) NULL;
  17.   di.fwType = 0;
  18.   pd.StartDoc(&di);
  19.   pd.StartPage();
  20.   pd.EndPage();
  21.   pd.EndDoc();
  22.   //EndDialog(hDlg, true);
  23.   return (true);
  24.  }
  25.  break;


---------------
Super.
Reply

Marsh Posté le 06-08-2002 à 17:28:56   

Reply

Marsh Posté le 06-08-2002 à 19:49:25    

tu devrais tester si StartPage ne te renvoie pas une valeur négative. car on ne sait pas si la page a réussi à commencer ou pas !
 

Code :
  1. (snip)
  2. if (pd.StartPage() < 0) {
  3.    MessageBox ("Initialisation de la page impossible" );
  4.    pd.AbortDoc();
  5. } else {
  6.    pd.EndPage();
  7.    pd.EndDoc();
  8. }


c'est beaucoup plus propre... et tu pourras mieux cerner l'erreur !


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 06-08-2002 à 23:49:21    

Il me semble que ca renvoie bien un nombre positif. Je te tiens au courant demain merci.


---------------
Super.
Reply

Marsh Posté le 07-08-2002 à 09:01:14    

C'est en fait le StartDoc qui renvoie -1, c'etait pourtant pas complique a tester le retour, qu'est ce que je suis con :sarcastic:
 
Par contre je sais pas encore pkoi il me renvoie -1.
 
edit: The RPC server is unavailable.


Message édité par godbout le 07-08-2002 à 09:06:33

---------------
Super.
Reply

Marsh Posté le 07-08-2002 à 09:03:41    

heu... le port de sortie à NULL, t sûr que c normal ? (di.lpszOutput )

Reply

Marsh Posté le 07-08-2002 à 09:08:02    

Ben ce qui est bizarre c'est que si je teste pas ca imprime, mais ca plante au moment du EndDoc :heink:
Donc le di.lpszOutput = NULL je sais pas si ca change grand chose dans mon cas ? :??:
J'ai jete un oeil sur codeguru et codeproject et il me semble que c'est pareil.


---------------
Super.
Reply

Marsh Posté le 07-08-2002 à 09:09:44    

Citation :

lpszOutput  
Pointer to a null-terminated string that specifies the name of an output file. If this pointer is NULL, the output will be sent to the device identified by the device context handle that was passed to the StartDoc function.


 
J'suis pas sur que ca change grand chose mais bon, j'essaye.


Message édité par godbout le 07-08-2002 à 09:09:52

---------------
Super.
Reply

Marsh Posté le 07-08-2002 à 09:10:36    

...en éspérant que t sous NT : fait un GetLastError après ton StartDoc qui rend -1, ça te donnera une précision sur la source de l'erreur.
Si t pas sous NT c pas la peine, ça te rendre pas le bon message.

Reply

Marsh Posté le 07-08-2002 à 09:11:58    

j'avais edite tout a l'heure pour le message d'erreur ;)
 
Sinon euh ben avec un output ca marche (:??:) mais ca plante toujours au EndDoc.


---------------
Super.
Reply

Marsh Posté le 07-08-2002 à 09:15:07    

Godbout a écrit a écrit :

j'avais edite tout a l'heure pour le message d'erreur ;)
 
Sinon euh ben avec un output ca marche (:??:) mais ca plante toujours au EndDoc.




 
Non, mais l'output en fait, tu le récupère dans ton CDC, par le CPrintDialog...
Cherche ce que c'est que ce serveur RPC !

Reply

Marsh Posté le 07-08-2002 à 09:15:07   

Reply

Marsh Posté le 07-08-2002 à 09:17:22    

El_Gringo a écrit a écrit :

 
 
Non, mais l'output en fait, tu le récupère dans ton CDC, par le CPrintDialog...
Cherche ce que c'est que ce serveur RPC !




J'suis en train de chercher.
Dans tous les codes que j'ai choppé personne ne mentionne l'output, bizarre ca :/


---------------
Super.
Reply

Marsh Posté le 07-08-2002 à 09:41:49    

Bon en fait l'histoire du retour negatif de StartDoc c'est arrangé, je sais pas comment :D
Par contre, toujours le plantage a EndDoc.


---------------
Super.
Reply

Marsh Posté le 07-08-2002 à 10:17:01    

Bon ben ca marche mais je comprends toujours pas.
En fait quand je balance l'exe depuis Visual, plantage sur EndDoc. Par contre quand je lance l'exe hors visual, ca print bien, pas de pb, pas de first exception.
 
edit: peut etre que je bloque le processus trop longtemps ? :??:


Message édité par godbout le 07-08-2002 à 10:19:56

---------------
Super.
Reply

Marsh Posté le 07-08-2002 à 12:42:35    

:heink:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 07-08-2002 à 13:32:21    

Harkonnen a écrit a écrit :

 :heink:  




t'inquiete pas c'est la meme chose pour moi hein.
Quand je passe au debug j'ai le droit a un invalide handle lorsque je close, quand je fais tourner normalement ca passe, et ca imprime...


---------------
Super.
Reply

Marsh Posté le 07-08-2002 à 14:07:24    

Godbout a écrit a écrit :

 
t'inquiete pas c'est la meme chose pour moi hein.
Quand je passe au debug j'ai le droit a un invalide handle lorsque je close, quand je fais tourner normalement ca passe, et ca imprime...




 
ça empêche pas qu'y a surement un truc pas bien saint qui se passe !

Reply

Marsh Posté le 07-08-2002 à 14:15:08    

El_Gringo a écrit a écrit :

 
 
ça empêche pas qu'y a surement un truc pas bien saint qui se passe !




C'est une habitude avec moi :D
Le pb c'est que j'ai pas l'impression de faire de conneries. [:spamafote]


---------------
Super.
Reply

Marsh Posté le 07-08-2002 à 15:26:26    

Genre "fuite de mémoire" qui n'est visible que dans un certain contexte. Y a pas d'accès de mémoire avec débordement qq part avant ? Un tableau de n cases avec écriture dans la n + 1 ième ?  
 
Ca m'est déja arrivé (étourderie :ange:) => bug pas clair...
 
C'est peut-être une finesse autre ...

Reply

Marsh Posté le 07-08-2002 à 15:35:57    

Je trouve pas :(
J'ai bien un tableau de 20 000 caracteres mais il est pas depasse ( :D ).
En fait pendant le debug, quand ca plante, j'ai le choix de continuer ou non, et si je continue il plante pas le prog.  
Je capte rien :D


---------------
Super.
Reply

Marsh Posté le 07-08-2002 à 16:38:27    

Je parlais plutôt d'un accès avant l'appel de Print. C'est pas obligatoirement de cet ordre.
 
Ce qui est des fois rageant est de mettre des MessageBox() pour capturer l'endroit où ça va pas, et que ça aille avec, mais bug quand elles n'y sont pas :fou: !!
 
Y a pas un mode Pas à Pas ou avec pnts d'arrêt ? Si un Handle est Invalide, porqué valide lors du RUN ? Mystère..

Reply

Marsh Posté le 07-08-2002 à 16:47:29    

carbon_14 a écrit a écrit :

Je parlais plutôt d'un accès avant l'appel de Print. C'est pas obligatoirement de cet ordre.




Vi j'avais bien compris.
 

carbon_14 a écrit a écrit :

 
Ce qui est des fois rageant est de mettre des MessageBox() pour capturer l'endroit où ça va pas, et que ça aille avec, mais bug quand elles n'y sont pas :fou: !!




:D
 

carbon_14 a écrit a écrit :

 
Y a pas un mode Pas à Pas ou avec pnts d'arrêt ? Si un Handle est Invalide, porqué valide lors du RUN ? Mystère..




Ben justement en mode pas a pas il plante (je vois toujours pas pkoi :??:).


---------------
Super.
Reply

Marsh Posté le 07-08-2002 à 16:47:52    

Je vais quand meme pas faire des screenshots pas a pas bordel :D


---------------
Super.
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed