none
Absturz wie try catch behandeln RRS feed

  • Frage

  • Hi,

    wie ich bereits einige mal gepostet hatte, habe ich öfter
    Abstürze (access vialoation) in CreateEnhMetaFileA+0x80 bzw.
    CreateEnhMetaFileA+0x86.

    Es ist eine optionale Komponente auf die ich verzichten könnte.
    Wie müsste ich vorgehen, um so etwas zu gestalten

    HANDLE SafeCreateEnhMetafile()
    {
       try {
           return CreateEnhMetafile();
       } catch(...)
       {
       }
       return NULL;
    }

    Tschüß, Holger.

    Freitag, 4. Februar 2011 09:11

Antworten

Alle Antworten

  • /EHa aktivieren, dann sollte das gehen...


    Jochen Kalmbach (MVP VC++)
    Freitag, 4. Februar 2011 09:41
  • Oder einen SEH Execption Handler einbauen.

    So würde ich vorgehen und nicht die c++ excpetions verbiegen.

    http://msdn.microsoft.com/en-us/library/aa273608(VS.60).aspx


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Freitag, 4. Februar 2011 09:46
    Moderator
  • Hi,

    "Martin Richter [MVP]" schrieb im Newsbeitrag news:62894b99-1fb2-484c-8a3e-45027fa10b79@communitybridge.codeplex.com...

    Oder einen SEH Execption Handler einbauen.

    So würde ich vorgehen und nicht die c++ excpetions verbiegen.
    http://msdn.microsoft.com/en-us/library/aa273608(VS.60).aspx


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de

    super, das hört sich doch nach einem Plan an.
    Habe ich gleich mal ausprobiert und das CMetaFile::CreateEnhanced
    umgebastelt.
    Hoffentlich wird der "echte" Absturz ebenso behandelt wie mein "manueller"....

    HDC SafeCreateEnhMetaFile_H(HDC hDC, LPCTSTR lpszFileName, LPCRECT lpBounds, LPCTSTR lpszDescription)
    {
       if (AfxMessageBox("SafeCreateEnhMetaFile_H abstuerzen lassen?", MB_ICONQUESTION | MB_YESNO)==IDYES)
       {
           int *p=0;
           *p=13;
       }
       return ::CreateEnhMetaFile(hDC, lpszFileName, lpBounds, lpszDescription);
    }

    HDC SafeCreateEnhMetaFile(CDC* pDCRef, LPCTSTR lpszFileName, LPCRECT lpBounds, LPCTSTR lpszDescription)
    {
       __try {
           return ::SafeCreateEnhMetaFile_H(pDCRef ? NULL : pDCRef->GetSafeHdc(), lpszFileName, lpBounds, lpszDescription);
       } __except(EXCEPTION_EXECUTE_HANDLER)
       {
       }
       AfxMessageBox("SafeCreateEnhMetaFile_H ist wohl abgestrzt.", MB_ICONSTOP | MB_OK);
       return NULL;
    }

    BOOL SafeCreateEnhMetaFile(CMetaFileDC &MetafileDC, CDC* pDCRef, LPCTSTR lpszFileName, LPCRECT lpBounds, LPCTSTR lpszDescription)
    {
       HDC hEMFDC=SafeCreateEnhMetaFile(pDCRef, lpszFileName, lpBounds, lpszDescription);
       if (hEMFDC==NULL) return FALSE;
       return MetafileDC.Attach(hEMFDC);
    }

    Tschüß, Holger.

    Freitag, 4. Februar 2011 10:31