刚找到一点线索,又断了!
看了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列表是空的!为什么会这样?