请教类似QQ那样崩溃时弹出的自己的崩溃提示框是怎么写的。 用的QQ都知道,如果QQ发生崩溃,QQ就会弹出一个自己的崩溃提示窗口,然后你可以点发送把崩溃信息发给软件开发商,替代了windows自带的Dr.Watson调试工具。哪位达人懂啊,最好能给兄弟个源码。 E-Mail: [email protected] 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用的次数少,所以我的QQ没有UP 会不会在catch()时处理了这些异常,然后自动发邮件的呢 会不会是创建一个守候进程,定时用GetExitCodeProcess得到QQ进程的退出码来实现的?如果非正常退出就提示. windows核心编程里有的,结构化异常处理。SetUnhandledExceptionFilter lightwell(大道不过两三行)说的是正解。MSDN上的BugLayer有例子好像是Jeffry的,你可以去找一下。 编译程序的时候,不对代码进行优化,然后在代码中使用try{}catch (...){}就可以捕获异常了。例如:try{char *p = 0;strcpy(p, "this is a test");}catch (...){ MessageBox(0, "catch an error.", 0, MB_OK);}记住一定要把代码优化禁用,否则catch无效。 ///////////////////////////////#include "PSErrDlg.h"LONG WINAPI MyExceptionFun(struct _EXCEPTION_POINTERS *ExceptionInfo ){ CPSErrDlg dlg; dlg.DoModal(); return EXCEPTION_EXECUTE_HANDLER; // 直接退出程序 //return EXCEPTION_CONTINUE_EXECUTION; // 好像是递归调用了自己的异常处理 //return EXCEPTION_CONTINUE_SEARCH; // 继续处理异常}extern"C" __declspec(dllexport) void WINAPI InitErrHandle(){ /* ////////////////////////////////////////////////////////////////////////// // DetourFunctionWithTrampoline 作用 // // 1. 保存被修改的入口代码 --> Trampoline 函数中 // // 2. 修改目标函数入口(接管目标函数) // ////////////////////////////////////////////////////////////////////////// // before Detouring a Function (此时三个函数[Target ,Trampoline, Detour]都是正常的状态,状态见 detour ppt 文档) DetourFunctionWithTrampoline((PBYTE)trampoline_MyFun,(PBYTE)MyFunDetour); */ //////////////////////////////////////////// SetUnhandledExceptionFilter(MyExceptionFun); /* typedef LONG (WINAPI *PTOP_LEVEL_EXCEPTION_FILTER)( struct _EXCEPTION_POINTERS *ExceptionInfo ); */}extern"C" __declspec(dllexport) void WINAPI ReleaseErrHandle(){ // DetourRemove((PBYTE)trampoline_MyFun,(PBYTE)MyFunDetour); SetUnhandledExceptionFilter(NULL);} 问题以解决,感谢个位的帮助。哪儿位知道,怎么把崩溃时的信息写入文件。有例子给我发一份,十分感谢。[email protected] 为何deletefile删除一个文件还存在,但手动删时提示正在使用,重启电脑文件就没了,怎样彻底删除一个文件? 请教各位大虾,单文档的程序,怎么在对话框里获得文档类的数据??? 几个DLL怎么可以一起进行编译啊,用什么工具啊? 好久没来了,散分 如何判断DLL已注册? 高分求教:200 大分 WNetOpenEnum 不能打開共享文件夾???? 请问一下,如下的宏定义该如何理解。 高手快请进!!!如何和 微软拼音输入法的COM接口 接上? 如何查找依赖的ACTIVEX部件? 我的vc6.0编辑器为什么每次操作都是半个字? 5条裤衩,散分200
如果非正常退出就提示.
MSDN上的BugLayer有例子好像是Jeffry的,你可以去找一下。
try{}catch (...){}
就可以捕获异常了。
例如:
try{
char *p = 0;
strcpy(p, "this is a test");
}
catch (...)
{
MessageBox(0, "catch an error.", 0, MB_OK);
}
记住一定要把代码优化禁用,否则catch无效。
///////////////////////////////
#include "PSErrDlg.h"
LONG WINAPI MyExceptionFun(struct _EXCEPTION_POINTERS *ExceptionInfo )
{
CPSErrDlg dlg;
dlg.DoModal();
return EXCEPTION_EXECUTE_HANDLER; // 直接退出程序
//return EXCEPTION_CONTINUE_EXECUTION; // 好像是递归调用了自己的异常处理
//return EXCEPTION_CONTINUE_SEARCH; // 继续处理异常
}extern"C" __declspec(dllexport) void WINAPI InitErrHandle()
{
/*
//////////////////////////////////////////////////////////////////////////
// DetourFunctionWithTrampoline 作用 //
// 1. 保存被修改的入口代码 --> Trampoline 函数中 //
// 2. 修改目标函数入口(接管目标函数) //
//////////////////////////////////////////////////////////////////////////
// before Detouring a Function (此时三个函数[Target ,Trampoline, Detour]都是正常的状态,状态见 detour ppt 文档)
DetourFunctionWithTrampoline((PBYTE)trampoline_MyFun,(PBYTE)MyFunDetour);
*/ ////////////////////////////////////////////
SetUnhandledExceptionFilter(MyExceptionFun);
/*
typedef LONG (WINAPI *PTOP_LEVEL_EXCEPTION_FILTER)(
struct _EXCEPTION_POINTERS *ExceptionInfo
);
*/
}extern"C" __declspec(dllexport) void WINAPI ReleaseErrHandle()
{
// DetourRemove((PBYTE)trampoline_MyFun,(PBYTE)MyFunDetour); SetUnhandledExceptionFilter(NULL);
}