我有一个MFC应用程序,它显示一个简单的对话框,其中包含一个自定义控件--自定义创建动态控件窗口。在创建自定义控件的第一个子控件后,应用程序在堆栈溢出后崩溃。
这是崩溃后的调用堆栈。
Amn80Lib1.dll!TPXBitButton::GetThisMessageMap() Line 1627 C++
Amn80Lib1.dll!TPXBitButton::GetMessageMap() Line 1627 C++
mfc100d.dll!CWnd::OnWndMsg(unsigned int message, unsigned int wParam, lo
在我的应用程序中,我使用CFrameWnd::OnHelp来打开一个word文档,而不是我们以前的.hlp文件。然而,当我按F1时,我注意到这个函数被执行了两次。我检查了这些堆栈,发现AfxWndProcBase正在接收命令0x1E146,然后CWnd::OnCommand在调用CFrameWnd::OnCmdMsg时将其截断到0xE146,而0xE146是ID_HELP命令。然后紧接着,AfxWndProcBase将接收0xE146命令,并再次运行帮助命令。经过一些实验,我发现当第一条消息被处理时,第二条消息在对AfxMessageBox的调用中被接收和处理。
处理程序在这里:
void C
我有使用MFC的dll,我需要它在另一台计算机上工作,而不需要额外的安装。
如果"C/C++ MFC代码生成MFC运行时库“是多线程动态链接库(/MD),并且”->的常规->用法“设置为在共享动态链接库中使用MFC,则my DLL需要msvcr80.dll。
如果将"General -> Use of MFC“设置为在静态库中使用MFC,并将"C/C++ -> Code Generation -> Runtime Library”设置为“Multi-threaded (/MT)”,则会出现错误#error Please use the /M
我继承了一个程序的维护,该程序当前从其覆盖中查询ADODB数据库。但是,当ADODB数据库句柄是进程外数据库连接的代理时,这会频繁地崩溃-显然,在等待RPC响应时,paint消息会导致它重新进入CView的呈现处理,从而导致事情变得非常混乱。
有没有办法从CView::OnBeginPrinting安全地使用COM进程外对象?例如,如果我可以阻止发送到相关窗口的窗口消息,直到COM调用完成,这可能会起作用……
下面是断言发生位置的堆栈跟踪:
mfc100d.dll!CPreviewDC::ReleaseOutputDC() Line 138 C++ (asserts here)
mfc100