Microsoft KB Archive/231592

= BUG: ClassWizard adds the AfxGetStaticModuleState in an MFC executable program in Visual C++ 6.0 =

Article ID: 231592

Article Last Modified on 5/3/2005

-

APPLIES TO

 The ClassWizard, when used with:  Microsoft Visual C++ 6.0 Enterprise Edition

 Microsoft Visual C++ 6.0 Professional Edition

 Microsoft Visual C++ 6.0 Standard Edition 

-

<div class="notice_section">

This article was previously published under Q231592

<div class="symptoms_section">

SYMPTOMS
When using ClassWizard to add Methods and Properties to an ATL interface in a MFC Application, ClassWizard will add the following line to the top of each function: AFX_MANAGE_STATE(AfxGetStaticModuleState) AfxGetStaticModuleState is used to maintain MFC global state information inside a MFC regular DLL. Using AfxGetStaticModuleState in an MFC EXE will not change to the correct module state. In addition, it will cause the MFC DLL startup source to be linked into the EXE increasing it's size.

AfxGetAppModuleState should be used in MFC EXEs.

<div class="resolution_section">

RESOLUTION
Change the AFX_MANAGE_STATE line to read: AFX_MANAGE_STATE(AfxGetAppModuleState) If the same code is used in an EXE and MFC regular DLL, use a #define:
 * 1) ifdef _USRDLL
 * 2)  define AFXMANAGESTATE AfxGetStaticModuleState
 * 3) else
 * 4)  define AFXMANAGESTATE AfxGetAppModuleState
 * 5) endif

<div class="status_section">

STATUS
This bug was corrected in Microsoft Visual Studio .NET 2002.

<div class="moreinformation_section">

MORE INFORMATION
MFC classes which use global and thread based MFC data need to use a specific MFC module state. As a result, entry points need to switch module states using the AFX_MANAGE_STATE macro to the module state associated with the EXE or DLL.

Entry points that would be affected include callback functions, custom windows procedures, and COM interfaces that are called from inproc servers.

<div class="references_section">