JWW*_*ker 2 windows dll exception-handling visual-c++
我尝试将向量异常处理添加到我的 Win32 DLL,但对AddVectoredExceptionHandler永远不会返回的调用。我只是得到了无用的<app name>.exe has stopped working对话。但是,如果我使用 Visual C++ 调试器调试 dll,那么它确实可以工作,并且在适当的时间调用处理程序函数,一切都很好。
明确地说,我在 DLL 初始化时添加了处理程序,就像这样
OutputDebugString("before adding\n");
AddVectoredExceptionHandler( 1, VectoredExcepHandler );
OutputDebugString("after adding\n");
Run Code Online (Sandbox Code Playgroud)
当不通过调试器运行时,DebugView 显示“添加前”而不是“添加后”。
处理程序本身如下所示:
static LONG CALLBACK VectoredExcepHandler( PEXCEPTION_POINTERS exInfo )
{
OutputDebugString("reached handler\n");
return EXCEPTION_CONTINUE_SEARCH;
}
Run Code Online (Sandbox Code Playgroud)
哦,如果重要的话,我正在运行 Vista Home 64。
事件查看器显示该错误是 kernel32.dll 中的访问冲突。
进一步的发现几乎解决了这个问题:我发现如果我OutputDebugString在处理程序中注释掉调用,错误就会消失。所以我猜有一些与OutputDebugString. 显然它不是我可能想要检查的常见问题之一,例如访问冲突和无效指令,因为如果我在调用 之前检查这些异常代码OutputDebugString,一切都很好。
| 归档时间: |
|
| 查看次数: |
1515 次 |
| 最近记录: |