2 hopedream2008 hopedream2008 于 2015.07.23 14:24 提问

MFC Dialog报错问题,m_hWnd为空 5C
mfc

代码如下:
BOOL CVSOConnectorApp::InitInstance()
{
//m_pMainWnd = (CWnd*)malloc(sizeof(m_pMainWnd));
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);

InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);

char buf[MAXBUFSIZE + 1];
char value[MAXPARAMETERLEN + 1];

CVSOConnectorDlg dlg;//报错地方,debug模式下只要执行到这就会报错,release下是ok的
m_pMainWnd = &dlg;

错误信息如图

7个回答

oyljerry
oyljerry   Ds   Rxr 2015.07.23 14:32

你创建变量还要DoModal才会真正生成对话框

 CVSOConnectorDlg dlg;
dlg.DoModal()
hopedream2008
hopedream2008 create和DoModal一样吧
接近 3 年之前 回复
hopedream2008
hopedream2008 在后面的代码有做,
接近 3 年之前 回复
caozhy
caozhy   Ds   Rxr 2015.07.23 14:54

CVSOConnectorDlg dlg;
dlg.Create(对话框资源id);

hopedream2008
hopedream2008 有做的,就是在CVSOConnectorDlg dlg;直接崩溃
接近 3 年之前 回复
hopedream2008
hopedream2008   2015.07.23 15:34

有的,
CVSOConnectorDlg *dlg = new CVSOConnectorDlg;
m_pMainWnd = dlg;

    dlg->serverdetails.setServer(sd.getServer());
    dlg->serverdetails.setPort(sd.getPort());
    dlg->serverdetails.setUsername(sd.getUsername());
    dlg->serverdetails.setPassword(sd.getPassword());
    dlg->serverdetails.setDomain(sd.getDomain());
    dlg->serverdetails.setGatewayHostname(sd.getGatewayHostname());
    dlg->serverdetails.setFullScreen(true);

    if (pShellManager != NULL)
    {
        delete pShellManager;
    }

    return dlg->Create(IDD_VSOCONNECTOR_DIALOG);
hopedream2008
hopedream2008 回复oyljerry: ralease是没问题,debug也要解呀,还有就是我的程序里面用到一个ActiveX控件
接近 3 年之前 回复
hopedream2008
hopedream2008 回复oyljerry: ralease是没问题,debug也要解呀,还有就是我的程序里面用到一个ActiveX控件
接近 3 年之前 回复
oyljerry
oyljerry 代码上看,没什么问题,估计更大可能性是Debug时有问题,VC有一些Debug宏检查不太正确,可以先用release版本运行
接近 3 年之前 回复
caozhy
caozhy   Ds   Rxr 2015.07.23 15:38

m_hWnd还是m_pMainWnd为空?
m_pMainWnd是什么类型

hopedream2008
hopedream2008 你能加下我的QQ吗,我这上传不了图片414666778,谢谢
接近 3 年之前 回复
hopedream2008
hopedream2008 ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));断点指向这里,m_pMainWnd是CWnd*
接近 3 年之前 回复
VisualEleven
VisualEleven   Ds   Rxr 2015.07.25 09:14

要看一下CVSOConnectorDlg类的构造函数中写了什么

hopedream2008
hopedream2008 构造函数里面就是一些变量和函数的定义
接近 3 年之前 回复
notfindjob
notfindjob   2015.07.25 15:53

将dlg换成CVSOConnectorDlg*,或者全局变量。
编译器bug!!!

hopedream2008
hopedream2008 有试过,指针和全局变量,
接近 3 年之前 回复
hopedream2008
hopedream2008   2015.07.27 08:18

class CVSOConnectorDlg : public CDialogEx
{
// Construction
public:
CVSOConnectorDlg(CWnd* pParent = NULL); // standard constructor
~CVSOConnectorDlg();
// Dialog Data
enum { IDD = IDD_VSOCONNECTOR_DIALOG };

protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

// Implementation
protected:
HICON m_hIcon;

// Generated message map functions
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()

public:
CMstscax1 m_VSOConnector;
ServerDetails serverdetails;
afx_msg void OnBnClickedButton1();
INT_PTR DoModal();
DECLARE_EVENTSINK_MAP()
void OnDisconnectedMstscax1(long discReason);
void OnConnectedMstscax1();
//afx_msg void OnSize(UINT nType, int cx, int cy);

public:
CProgressBar pb;
void OnConnectingMstscax1();
void OnLogonErrorMstscax1(long lError);
afx_msg void OnSize(UINT nType, int cx, int cy);
CRect m_rect;
// afx_msg void OnNcPaint();
afx_msg void OnKillFocus(CWnd
pNewWnd);
afx_msg int OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message);
void OnRemoteProgramResultMstscax1(LPCTSTR bstrRemoteProgram, long lError, BOOL vbIsExecutable);
void OnRemoteProgramDisplayedMstscax1(BOOL vbDisplayed, unsigned long uDisplayInformation);
void OnIdleTimeoutNotificationMstscax1();
void OnConfirmCloseMstscax1(BOOL* pfAllowClose);
void OnWarningMstscax1(long warningCode);
void OnRequestContainerMinimizeMstscax1();
afx_msg void OnClose();
void OnEnterFullScreenModeMstscax1();
void OnLeaveFullScreenModeMstscax1();
void OnRequestGoFullScreenMstscax1();
void OnRequestLeaveFullScreenMstscax1();
void OnRemoteDesktopSizeChangeMstscax1(long width, long height);
};

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
m_hWnd 0xfeeefeee
获得主窗口句柄AfxGetApp()->m_pMainWnd
AfxGetApp()->m_pMainWnd 1: AfxGetApp()->m_pMainWnd这个东西就是主窗口的指针。即CMainFrame类的对象指针。很多东西的创建和它有关。以及可以用它来获取视图和文档指针。也可以使用AfxGetMainWnd();或 AfxGetApp()->GetMainWnd() 这个函数在程序的任何地方都可以调用的原因是它是一个全局函数,函数返回值是C
解决GetDlgItem 使用时出现ASSERT(::IsWindow(m_hWnd))断言
基于对话框或SDI的情况下,有时手动添加,或从ToolBox拖动控件(比如CEdit, CListBox等)用于工程。当使用父窗口的GetDlgItem函数对这些控件进行操作时,会有时弹出断言。比如下面的代码段:CWnd* pwnd = GetDlgItem(IDE_EDIT_CODE); // CEdit派生类 if (pwnd != NULL ) { pwnd->DestroyWindow(); }就会在主程序结束的时候弹出断言。断言追踪到下面代码 CWnd* CWnd::GetDlgIt
解决两个对话框传值程序中断在ASSERT(::IsWindow(m_hWnd)); return InsertItem(LVIF_TEXT, nItem, lpszItem, 0, 0, 0, 0);
解决在MFC中将一个对话框中的变量值传入另一个对话框的ListControl时,程序运行中断在ASSERT(::IsWindow(m_hWnd)); return InsertItem(LVIF_TEXT, nItem, lpszItem, 0, 0, 0, 0);的问题
GetDlgItem使用时出现ASSERT断言或报错
MFC中调用GetDlgItem函数出现ASSERT(::IsWindow(m_hWnd));断言报错 原因:     在MFC的对话框程序、单文档程序和多文档程序中,由于控件所处的位置不同(即控件属于那个窗口程序),导致直接调用此函数无法获取所属窗口句柄导致出现断言报错。 解决:     对话框程序:直接使用GetDlgItem函数即可;     单文档程序:m_wndDlgB
写MFC程序ASSERT(IsWindow(pTemp->m_hWnd))报错
<br />这两天搞一个协议转发服务,没想到被一个问题难住:调试时报如下错误<br />Debug Assertion Failed<br />f:/sp/vctools/vc7libs/ship/atlmfc/src/mfc/occcont.cpp(950)<br />950行代码是:ASSERT(IsWindow(pTemp->m_hWnd)); <br />硬盘压根没F盘,竟然错到了f盘去了,一开始在谷歌使用了错误的关键词搜索,扫出一大堆英文网站,看了半天没看明白,以为是运行时库的问题,我使用的是vs
MFC中ASSERT(IsWindow(pTemp->m_hWnd));报错
vc6.0写好的mfc程序,在vc6.0下能运行通过,直接从别人那拷贝到vs2010中出现了以下错误 Debug Assertion Failed f:/sp/vctools/vc7libs/ship/atlmfc/src/mfc/occcont.cpp(925) 925行代码是:ASSERT(IsWindow(pTemp->m_hWnd)); 对话框也打不开,显示 没有安装这个Act
m_hWnd 与 C++中的this指针
(一)m_hWnd ① m_hWnd这个成员变量,最早是定义在类CWnd中,而且是类CWnd的第一个数据成员,先看一下MSDN的解析:  The handle of the Windows window attached to this CWnd. The m_hWnd data member is a public variable of type HWND. 由此可知,它是窗
ATL控件m_hWnd等于NULL(为空)怎么办
1.确保使用atl control创建的控件。2.设置m_bWindowOnly=TRUE;
非模态对话框的指针释放的理解
最近项目