MSDN说,对于CDialog.DoModal()函数,如果函数无法创建对话框,则返回值为-1.它没有说明在哪种情况下它可能无法创建对话框.
对MFC源代码的快速调查显示,如果(LPCDLGTEMPLATE)LockResource(hDialogTemplate)返回NULL,则DoModal函数可以返回-1.
由于我的问题无法在压力测试中稳定复制,我无法调试程序以找到根本原因.这里有人遇到过类似的问题吗?
我读的源代码CString中的MFC.我对构造函数的实现方式很好奇CString::CString(LPCTSTR lpsz).
在我的理解,通过复制指定的字符串之前lpsz,只需要检查是否lpsz是NULL更没有必要与检查,如果结合HIWORD(lpsz)是NULL.
有没有MFC人经过这里并愿意给出一些解释?
CString::CString(LPCTSTR lpsz)
{
Init();
if (lpsz != NULL && HIWORD(lpsz) == NULL)
{
UINT nID = LOWORD((DWORD)lpsz);
if (!LoadString(nID))
TRACE1("Warning: implicit LoadString(%u) failed\n", nID);
}
else
{
int nLen = SafeStrlen(lpsz);
if (nLen != 0)
{
AllocBuffer(nLen);
memcpy(m_pchData, lpsz, nLen*sizeof(TCHAR));
}
}
}
Run Code Online (Sandbox Code Playgroud) 我的工作流程如下。
谁能告诉我为什么?我的WinDbg版本是6.11.0001.404(X86),Windows XP 64位。我正在从非常复杂的运行时系统中调试dll。
我编写了一个简单的exe,然后单击以打开它。打开它后,我立即打开源代码文件并设置一个断点。在这种情况下可以使用!