我有一个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/C++动态链接库,它除了基本的Win32动态链接库之外没有任何依赖项。因此,我在项目属性-> General -> Use of MFC中选择了"Use MFC in a Static Library" setting
但是当我构建这个DLL并用Dependency Walker检查结果时,我得到的结果是:
显示对以下MFC Dlls的依赖关系:
MFC90U.DLL
MSVCR90.DLL
MSVCP90.DLL
那么我到底做错了什么呢?
PS。我正在使用Visual Studio 2008
我已经开始为我正在从事的一个C++项目使用GTest (Google Test)。我有一个严重依赖MFC的类(CFile、CObject、CString等)。
我如何打破对MFC的依赖(或最小化它们),这样我就不必仅仅为了运行测试而创建虚拟的MFC对象?我想测试一下我的方法没有MFC的功能。
下面是我必须测试的一种方法的示例:
// DumpContext class inherits from CDumpContext
void MyClass::Print(DumpContext &dc)
{
// MyClass::Print real work goes here :