I have an OCX ( a regular MFC DLL dynamically linked with MFC, built
with _USRDLL and _AFXDLL). The problem I am facing is that when my MFC
application load this OCX, the m_classList member variable of
AFX_MODULE_STATE get resets to NULL. This was not happening with

OCX IinitInstance is defined as

BOOL CFooApp::InitInstance()
return COleControlModule::InitInstance();

CFooApp is derived from COleControlModule and COleControlModule is
derived from CWinApp.

The function exposed in this OCX is

STDAPI DllRegisterServer(void)



if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))

return ResultFromScode(SELFREG_E_CLASS);

return NOERROR;


From the application I am calling, DllRegisterServer exposed in this

So wanted to know what is wrong in this OCX which is causing the
AFX_MODULE_STATE class list to be deletd or why it is not restoring
the MainApp manage state ? Why this problem in VS2005 ?

After this DLL gets loaded, the for loop in follwing code is not
executed and MessageBox "Found" not displayed.

AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
CRuntimeClass* pClass=NULL;

for (pClass = pModuleState->m_classList; pClass != NULL;

pClass = pClass->m_pNextClass)


if (lstrcmpA("COrLongProp", pClass->m_lpszClassName) == 0)






The OCX works fine in VS2003. Problem occured when the OCX was moved
to VS2005 ?