无法创建主窗口
Cannot create main window?
我试图用C++制作一个简单的MFC GUI应用程序,但在生成主窗口(对话框?)时似乎遇到了问题。当我试图编译代码时,显示以下消息:
GUI_Employee_0501.exe中0x00E7A9DC处出现未处理的异常:0xC0000005:读取位置0xFEFEFF66时发生访问冲突。
断点停止在winmain.cpp内,位于pThread->m_pMainWnd->DestroyWindow()。pThread->m_pMainWnd的值为NULL,我怀疑这是问题的原因。
你能具体说明这里的问题是什么吗?我有一个示例代码,它和我的非常相似,但它很有效,所以我真的不知道发生了什么!
#include <afxwin.h>
#include "resource.h"
#include <iostream>
using namespace std;
#pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console")
CEdit *pFNAME;
CEdit *pLNAME;
CEdit *pSALARY;
CEdit *pDDAY;
CEdit *pMMONTH;
CEdit *pYYEAR;
CComboBox *pGENDER;
CButton *pADD;
CButton *pDELETE;
CButton *pSAVE;
CButton *pLOAD;
class ENTRY_FORM : public CDialog
{
public:
ENTRY_FORM(CWnd* pParent = NULL) : CDialog(ENTRY_FORM::IDD, pParent) { }
enum { IDD = dialog_main };
protected:
virtual void DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); }
virtual BOOL OnInitDialog()
{
CDialog::OnInitDialog();
SetUpInterfacePointers();
return true;
}
void SetUpInterfacePointers(){ ... does its own thing ... }
public:
afx_msg void add() { PRESS_ADD(); }
void PRESS_ADD() { ... does its own thing ... }
DECLARE_MESSAGE_MAP()
};
class Program : public CWinApp
{
public:
Program(){ }
public:
virtual BOOL InitInstance()
{
CWinApp::InitInstance();
cout << "CWinAPP:initInstance" << endl;
ENTRY_FORM dlg;
m_pMainWnd = &dlg;
cout << "mpMainWnd" << endl;
INT_PTR nResponse = dlg.DoModal();
return FALSE;
}
};
//
BEGIN_MESSAGE_MAP(ENTRY_FORM, CDialog)
ON_COMMAND(button_add, add)
END_MESSAGE_MAP()
//
Program theApp;
InitInstance()
:的变化
return FALSE;
至
return TRUE;
这是因为CWinApp::InitInstance应该只在失败的情况下返回FALSE,如果所有初始化都正常,则返回TRUE。如果失败,AfxWinMain
将尝试销毁m_pMainWnd
指向的窗口,这是不可能的(这会导致Undefined Behavior),因为您为m_pMainWnd
分配了一个本地对象(一旦InitInstance结束,就会销毁该对象)。
[编辑]
S。B Bae-为了进一步调查并找到根本原因,您需要调试对话框结束后m_pMainWnd应设置为NULL的位置。这应该在wincore.cpp的CWnd::OnNcDestroy()
中。有一行pThread->m_pMainWnd = NULL;
显然没有在您的应用程序中执行。
聚会迟到了,但我在创建MFC对话框应用程序时发现了确切的问题。我发现我意外地将应用程序对话框样式(在属性中)从"Popup"更改为"Child"。切换此项可以始终切换此错误。"重叠"似乎和"弹出"一样有效。
https://learn.microsoft.com/en-us/cpp/mfc/reference/styles-used-by-mfc?view=vs-2019#窗口样式
- 如何为使用创建窗口创建的窗口创建自定义背景颜色
- 窗口 :创建仅具有对我的进程的权限的目录 (C++)
- DXGI_ERROR_INVALID_CALL为核心窗口创建交换链时
- 视觉C++窗口创建失败
- 从 WinAPI 窗口创建控制台窗口
- 窗口创建错误 - 可能是事件处理
- Qt:当主窗口被模式QDialog阻止时,如何聚焦从主窗口创建的无模式QDialog
- Visual Studio 2012应用程序窗口创建/调整大小与VS2008窗口创建不同?为什么?
- C++/SFML窗口创建失败
- 窗口创建问题
- 使用创建窗口创建 MDI 子窗口
- MDI 子窗口创建失败
- Win32窗口创建失败
- 挂钩窗口创建;挂钩未被触发
- 如何使用'C'或'C++'为窗口创建独立的程序或应用程序
- 调用glfwWindowHint()后,GLFW窗口创建失败
- c++窗口创建/ SDL
- Qt从我的主窗口创建新窗口
- 窗口创建失败-LoadFrame(IDR_MAINFRAME)使C++失败
- Visual Studio和SDL2窗口创建失败