创建CFrameWnd会给出第一次机会的异常——为什么
Create CFrameWnd gives first-chance exceptions--why?
我正试图编写一个简单的MFC应用程序,使用基于CFrameWnd的代码在可滚动窗口中绘制。以下代码改编自Proise"用MFC编程Windows",第2版,第89ff页。
当我在调试器中运行此程序时,我会得到两个首次出现的异常。如果我忽略这些,窗口会按预期显示,我可以在其中绘图。如果我在"C++异常"上启用break,我会得到一个堆栈,它只是"内部"代码,我没有它的源代码。通过逐步查看代码,我发现异常发生在对CreateWindowEx的调用中的CWnd::CreateEx中。
这个代码出了什么问题?64位Windows 7,Visual Studio 2013更新4。这是一个调试版本x64,在静态库中使用MFC,使用多字节字符集,具有多线程调试运行时(/MTd)。
// Viewer.h
#include <afxwin.h>
// Adapted from Prosise "Programming Windows with MFC", 2nd ed, pp 89ff.
class CViewerApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};
class CMainWindow : public CFrameWnd
{
public:
CMainWindow();
protected:
afx_msg void OnPaint();
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnHScroll(UINT nCode, UINT nPos, CScrollBar *pScrollBar);
afx_msg void OnVScroll(UINT nCode, UINT nPos, CScrollBar *pScrollBar);
public:
DECLARE_MESSAGE_MAP()
};
// Viewer.cpp: Display
#include <afxwin.h>
#include "Viewer.h"
CViewerApp myApp;
BOOL CViewerApp::InitInstance()
{
m_pMainWnd = new CMainWindow;
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}
BEGIN_MESSAGE_MAP(CMainWindow, CFrameWnd)
ON_WM_CREATE()
ON_WM_SIZE()
ON_WM_PAINT()
ON_WM_HSCROLL()
ON_WM_VSCROLL()
END_MESSAGE_MAP()
CMainWindow::CMainWindow()
{
Create(NULL, "Viewer", WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL | WS_MAXIMIZE);
}
int CMainWindow::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if(CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
return 0;
}
void CMainWindow::OnPaint()
{
}
void CMainWindow::OnSize(UINT nType, int cx, int cy)
{
//TO DO
}
void CMainWindow::OnHScroll(UINT nCode, UINT nPos, CScrollBar *pScrollBar)
{
}
void CMainWindow::OnVScroll(UINT nCode, UINT nPos, CScrollBar *pScrollBar)
{
}
多亏了@IInspectable和@David Ching的有用建议,我才找到了问题的原因。这是一个名为"卓越之声"的软件,它是最近在我不知情的情况下安装的。
我使用Process Explorer来跟踪pmls64.dll的使用情况,并使用任务管理器和自动运行来定位可执行文件。该程序安装在Programs(x86)中自己的文件夹中,并进行了卸载,我使用了卸载。然后我不得不手动删除程序(x86)中的文件夹,并删除几个注册表项。
此外,这个程序在Firefox上安装了一个插件(再次未经许可),我不得不手动删除它。
除了它在我自己的软件中引起的异常之外,我怀疑Premier Voice今天弹出了一个窗口,询问我这台电脑每个用户的出生日期和性别。
相关文章:
- 处理多个异常集合的C++方法
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- C++中的赋值发生,尽管右侧出现异常
- 从构造函数抛出异常时如何克服内存泄漏
- 异常属于C++中的线程还是进程
- BunkerBuilder.exe中0x0070C75C处的首次机会异常:0xC0000005:写入位置0xCCCCC0
- 首次机会异常设置检查列表视图中的状态
- 创建CFrameWnd会给出第一次机会的异常——为什么
- MSXML6 中的第一次机会异常
- 错误地使用fprintf?获取异常 第一次机会异常
- 我的代码中的第一次机会异常
- ConsoleApplication2.exe中的首次机会异常:0xC0000005:写入访问冲突,c++
- VC++中的首次机会异常
- 为什么我得到第一次机会异常,如果没有人调用该函数
- 在0x5919c8ec (msvcr100d.dll)的第一次机会异常:0xC0000005:访问违反读取位置0xfee
- c++ OBJ解析器-第一次机会异常
- 此异常是什么意思>第一次机会异常在 Project3 中0x000007FEFD38A06D时未处理的异常.exe
- ..处的首次机会异常:读取位置时发生访问冲突..当使用Visual Studio 2010进行调试时
- 在Win7 64位上因未处理的首次机会异常而崩溃(在XP 32位、Linux 64位上没有问题)