我正在将一些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在进入函数时都是空的,我不明白为什么?)
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并检查create方法后,我发现这是错误发生的地方:HWND hWnd = :: AfxCtxCreateWindowEx(..)我注意到cs.hwndParent和cs.hMenu都显示此错误" unused = 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());
}
问题源于LoadFrame(),其中父窗口和上下文为空。为什么他们" null / ???"? (此应用程序在VC 6中正常运行,因此必须是升级的结果)如果有人看到此问题或有任何可能启发我的问题的信息,我将非常感激。在此先感谢。
答案 0 :(得分:0)
事实证明,我的库路径(Linker - > Additional Dependencies)包含一个支持与MDI(多文档接口)相对的SDI(单文档接口)的库。除此之外,MDI库是旧版本(VC6),它不支持Visual Studio 2010中使用的新MDI方法。