none
MFC Printer 출력 에러 문의 RRS feed

  • 질문

  • 개발 도구 : Visual Studio 2008

    개발 OS : Windows 7

    안녕하세요.

    Visual Studio 2008 SP1 을 사용하여 개발하는 개발자입니다.

    MFC로 프린트 출력을 구현하여 사용하고 있습니다.

    한가지 에러가 나타나, 질문 드립니다.

    문제점 : 프린트 출력이 정상적으로 잘 되다가, 출력 후 약 1분 30초 정도 후에 출력버튼을 누르면 Vioation Error 가 나타나면서

    프로그램이 멈춤.

    연속적으로 출력을 누를땐, 정상동작합니다. 허나 약 2분정도 후에 다시 누르면 에러가 나타나면서 프로그램이 죽습니다.

    연속적으로 약 90회정도까지 눌러봤으나, 정상동작합니다.

    디버그 데이터를 확인하면 처음에는 "기본설정된 프린트 이름과 모드를" 잘 찾아서 프린트를 설정하고 있습니다.

    허나 이후에는 "기본 설정된 프린트 이름"을 찾을 수 없는 것인지 NULL로 되버리는것인지 모르겠습니다.

    OnPreparePrint 함수에서 페이지를 설정하고 DoPreparePrinting 을 호출할때 WinAPP 내부에서 error가 나타납니다.

    GetPrinterDeviceDefaults() 함수를 거쳐 -> UpatePrintdevice() ???? -> Get.....무슨 함수에서 에러가 나타나며

    정확하게는

    AFXAWARE_FUNC(BOOL ,PrintDlgW,(LPPRINTDLGW unnamed1),(unnamed1)) << 부분에서 멈춥니다.

    인터넷에 돌아다니는 소스를 사용하여 해결을 하려 했지만 잘 되지 않았습니다.

    ------------- 디바이스 이름을 강제적으로 재설정 해 보았습니다. 하지만 해결되지 않음 -----------

    void CMyView::OnPreparePrinting()
    {
        PRINTDLG printDlg = { 0 };
        printDlg.lStructSize = sizeof(PRINTDLG);
        if (AfxGetApp()->GetPrinterDeviceDefaults(&printDlg))
        {
            if (printDlg.hDevMode)
            {
                DEVMODE *dm = (DEVMODE*)::GlobalLock(printDlg.hDevMode);
                if (dm)
                {
                    dm->dmFields |= DM_ORIENTATION;
                    dm->dmOrientation = DMORIENT_LANDSCAPE;
                    ::GlobalUnlock(printDlg.hDevMode);
                }
            }
        }

        CMyView::
    OnPreparePrinting();
    }

    -----------------------------------------------

    혹시 이부분에 대한 해결 방법이 있습니까?

    도움 부탁드립니다.

    2016년 12월 22일 목요일 오후 2:11

답변

  • 다음 주소에서 GetPrinterDeviceDefaults()를 확인했습니다.

    https://msdn.microsoft.com/en-us/library/t5799e1d.aspx

    차이는 없어보이네요.

    (혹시 모르니.. msdn 코드로 변경해보세용 'ㅁ';)

    추가적으로..

    if(::GlobalUnlock(printDlg.hDevMode)){

    AfxMessageBox(_T("[Error] - Unlock memory object"));

    }

    맨 마지막 코드 CMyView::OnPreparePrinting(); 이 부분은 return CMyView::DoPreparePrinting();인거죠?

    그래도 동일한 문제라면, Release 모드로 빌드하신 후에도 동일한 문제가 발생하나요? (그냥 느낌입니다...)

    • 편집됨 Scott Park 2016년 12월 23일 금요일 오전 5:45
    • 답변으로 표시됨 Boram YiModerator 2017년 1월 16일 월요일 오전 1:49
    2016년 12월 23일 금요일 오전 4:57