Skocz do zawartości

program niechce drukowac


Guru

Recommended Posts

Chce zrobic programik ktory cos mi wydrukuje na drukarce wszystko pisalem wedlug kursu ze tej strony oto zrodlo (oczywiscie cale tworzenie okna i obsluga komunikatow tez jest):

HDC hdcDrukarki;
PRINTER_INFO_5 *pinfo;
DWORD dwRozmiarbuf, dwIloscdrukarek;
EnumPrinters(PRINTER_ENUM_DEFAULT, NULL, 5, NULL, 0, &dwRozmiarbuf, &dwIloscdrukarek);

pinfo = (PRINTER_INFO_5 *) malloc(dwRozmiarbuf);
EnumPrinters(PRINTER_ENUM_DEFAULT, NULL, 5, (PBYTE) pinfo, dwRozmiarbuf, &dwRozmiarbuf, &dwIloscdrukarek);
hdcDrukarki=CreateDC(NULL, NULL, pinfo->pPrinterName, NULL);
free(pinfo);

DOCINFO di;
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "Dokument"; //nazwa dokumentu
di.lpszOutput = NULL;
di.lpszDatatype = NULL;
di.fwType = 0;

if( StartDoc(hdcDrukarki, &di) <= 0 ){}
if (StartPage (hdcDrukarki) <= 0){}
TextOut(hdcDrukarki, 10, 10, "ala", 3);
if( EndPage(hdcDrukarki) <=0 ){}
if( EndDoc(hdcDrukarki) <= 0 ){}
DeleteDC (hdcDrukarki);

Program kompiluje sie dobrze bez zadnych bledow czy warrningow ale zaraz po odpaleniu exe wyskakuje taki blad:
Unhandled exception in zlecenia.exe (NTDLL.DLL): 0x0000005: Access Violation
I jak tylko klikne Ok wylacza sie program

Blad wyskakuje jak doszedlem przy wykonywaniu tej linijki:
hdcDrukarki=CreateDC(NULL, NULL, pinfo->pPrinterName, NULL);
bo gdy ja zaznacze jako kometarz to program dziala wsumie poprawnie (niedrukuje ale sie niewylacza sam i zadnego bledu z komunikatem niewysypuje)

Pozdrawiam:
Krzysztof T.

Link do komentarza
Udostępnij na innych stronach

Problem wbrew pozorą jest gdzie indziej.

EnumPrinters(PRINTER_ENUM_DEFAULT, NULL, 5, NULL, 0, &dwRozmiarbuf, &dwIloscdrukarek);

W systemach opartych o architekture NT nie mozna uzywać PRINTER_ENUM_DEFAULT. To powoduje, ze nie rozmiarbufora pobieranego przy pierwszym enum.... jest rowny 0 i oberacja pinfo->pPrinterName konczy sie niepowodzeniem.

Proponuje uzyc PRINTER_ENUM_NAME lub PRINTER_ENUM_LOCAL.

Pozatym

//hdcDrukarki=CreateDC(NULL, NULL, pinfo->pPrinterName, NULL); 
//powinno być:
hdcDrukarki=CreateDC(NULL, pinfo->pPrinterName, NULL, NULL); 

powodzenia w drukowaniu

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...