刚找到一点线索,又断了!
看了AFX_CLASSINIT的代码,发现Runtimeclass表的头并没有保存在pFirstClass中,而是这样的:
AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
AfxLockGlobals(CRIT_RUNTIMECLASSLIST);
pModuleState->m_classList.AddHead(pNewClass);
AfxUnlockGlobals(CRIT_RUNTIMECLASSLIST);
看来就是这里了,于是我写了个测试程序:
AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
AfxLockGlobals(CRIT_RUNTIMECLASSLIST);
//pModuleState->m_classList.AddHead(pNewClass);
CRuntimeClass* prt = pModuleState->m_classList.GetHead();
while (prt)
{
strTemp = prt->m_lpszClassName;
str += strTemp + "\r\n";
prt = pModuleState->m_classList.GetNext(prt);
}
AfxUnlockGlobals(CRIT_RUNTIMECLASSLIST);
调试发现pModuleState->m_classList列表是空的!为什么会这样?
看了AFX_CLASSINIT的代码,发现Runtimeclass表的头并没有保存在pFirstClass中,而是这样的:
AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
AfxLockGlobals(CRIT_RUNTIMECLASSLIST);
pModuleState->m_classList.AddHead(pNewClass);
AfxUnlockGlobals(CRIT_RUNTIMECLASSLIST);
看来就是这里了,于是我写了个测试程序:
AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
AfxLockGlobals(CRIT_RUNTIMECLASSLIST);
//pModuleState->m_classList.AddHead(pNewClass);
CRuntimeClass* prt = pModuleState->m_classList.GetHead();
while (prt)
{
strTemp = prt->m_lpszClassName;
str += strTemp + "\r\n";
prt = pModuleState->m_classList.GetNext(prt);
}
AfxUnlockGlobals(CRIT_RUNTIMECLASSLIST);
调试发现pModuleState->m_classList列表是空的!为什么会这样?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货