窗口创建失败-LoadFrame(IDR_MAINFRAME)失败C ++

瑞安·麦克·克洛斯基(Ryan Mc Closkey)

我正在将某些Windows应用程序(旧版代码)从VC 6升级到VS2010。大多数应用程序都经过编译,可以在清除预期的转换错误后运行,但与此同时,我遇到了很多麻烦。这是LoadFrame()失败并退出应用程序的地方。此处返回的错误为0。

     CMainFrame* pMainFrame = new CMainFrame;// Create main MDI Frame window
     if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
         DWORD err = GetLastError();
     return FALSE;

这是上面的LoadFrame()函数:(pParentWnd和pContext在进入函数时都为Null,我不明白为什么?)

BOOL CMDIFrameWnd::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle,
CWnd* pParentWnd, CCreateContext* pContext)
{
    if (!CFrameWnd::LoadFrame(nIDResource, dwDefaultStyle,
      pParentWnd, pContext))
        return FALSE;

    // save menu to use when no active MDI child window is present
    ASSERT(m_hWnd != NULL);
    m_hMenuDefault = ::GetMenu(m_hWnd);
    return TRUE;
}

在逐步遍历LoadFrame并检查了创建方法之后,我发现这里是发生错误的地方:HWND hWnd = :: AfxCtxCreateWindowEx(..)我注意到cs.hwndParent和cs.hMenu都显示此错误“未使用= CXX0030:错误:无法计算表达式”。我知道这个错误可能意味着该表达式指向的是程序地址空间之外的内存,但是我没有看到这个问题。我在网上看到了其他与此类似的问题,但是没有任何事情可以帮助我理解问题。

BOOL CWnd::CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName,
LPCTSTR lpszWindowName, DWORD dwStyle,
int x, int y, int nWidth, int nHeight,
HWND hWndParent, HMENU nIDorHMenu, LPVOID lpParam)
{
    ASSERT(lpszClassName == NULL || AfxIsValidString(lpszClassName) || 
        AfxIsValidAtom(lpszClassName));
    ENSURE_ARG(lpszWindowName == NULL || AfxIsValidString(lpszWindowName));

    // allow modification of several common create parameters
    CREATESTRUCT cs;
    cs.dwExStyle = dwExStyle;
    cs.lpszClass = lpszClassName;
    cs.lpszName = lpszWindowName;
    cs.style = dwStyle;
    cs.x = x;
    cs.y = y;
    cs.cx = nWidth;
    cs.cy = nHeight;
    cs.hwndParent = hWndParent;
    cs.hMenu = nIDorHMenu;
    cs.hInstance = AfxGetInstanceHandle();
    cs.lpCreateParams = lpParam;

    if (!PreCreateWindow(cs))
    {
        PostNcDestroy();
        return FALSE;
    }

AfxHookWindowCreate(this);
HWND hWnd = ::AfxCtxCreateWindowEx(cs.dwExStyle, cs.lpszClass,
        cs.lpszName, cs.style, cs.x, cs.y, cs.cx, cs.cy,
        cs.hwndParent, cs.hMenu, cs.hInstance, cs.lpCreateParams); // RMC here's the error

GetLastError());
DWORD err = GetLastError();

#ifdef _DEBUG
if (hWnd == NULL)
{
    TRACE(traceAppMsg, 0, "Warning: Window creation failed: GetLastError returns 0x%8.8X\n",
        GetLastError());
}

问题源于父窗口和上下文为Null的LoadFrame()。为什么它们为“ null / ???”?(此应用程序在VC 6中可以正常运行,因此必须是升级的结果。)如果有人看到了此问题,或者有任何可以启发我解决该问题的信息,我将非常感激。提前致谢。

瑞安·麦克·克洛斯基(Ryan Mc Closkey)

原来,我的库路径(链接器->其他依赖项)包含一个库,该库支持与MDI(多文档接口)相对的SDI(单文档接口)。除此之外,MDI库是一个较旧的版本(VC6),它不支持Visual Studio 2010中使用的新MDI方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系debugcn@gmail.com 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章