Guru Napisano Luty 11, 2019 Autor Zgłoś Udostępnij Napisano Luty 11, 2019 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. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Complex Napisano Luty 11, 2019 Zgłoś Udostępnij Napisano Luty 11, 2019 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 Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.