Benutzer mit den meisten Antworten
Absturz wie try catch behandeln

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 gestaltenHANDLE SafeCreateEnhMetafile()
{
try {
return CreateEnhMetafile();
} catch(...)
{
}
return NULL;
}Tschüß, Holger.
Antworten
-
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- Als Antwort vorgeschlagen Martin RichterModerator Samstag, 5. Februar 2011 21:32
- Als Antwort markiert Martin RichterModerator Freitag, 13. Mai 2011 10:06
Alle Antworten
-
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- Als Antwort vorgeschlagen Martin RichterModerator Samstag, 5. Februar 2011 21:32
- Als Antwort markiert Martin RichterModerator Freitag, 13. Mai 2011 10:06
-
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.