Registrations are now open. Join us today!
There is still a lot of work to do on the wiki yet! More information about editing can be found here.
Already have an account?

Microsoft KB Archive/170979

From BetaArchive Wiki
Knowledge Base


Article ID: 170979

Article Last Modified on 11/21/2006



APPLIES TO

  • Microsoft Foundation Class Library 4.2, when used with:
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 4.2 Professional Edition



This article was previously published under Q170979

SYMPTOMS

When using a class imported from an MFC extension DLL in an MFC application with full server support for ActiveX documents, various problems may occur including:

  • Access violation
  • Assert in dbgheap.c line 1011
  • Incorrect values in data members


CAUSE

The header file, afxdocob.h, which is only included for full server of ActiveX documents, is missing the following near the end of the file:

   #ifdef _AFX_PACKING
   #pragma pack(pop)
   #endif
                

RESOLUTION

Add the above compiler directives after including afxdocob.h, or modify afxdocob.h.

STATUS

Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug has been corrected in Microsoft Visual C++ 5.0.

MORE INFORMATION

The default data member packing for structures and classes is 8 bytes. MFC headers change this to 4 bytes to save memory. Because afxdocob.h is missing the #pragma pack(pop), all user class declarations compiled after including this file will be packed with 4-byte alignment. When sharing this class between an application and an extension DLL, the structure will be packed differently since the extension DLL doesn't include afxdocob.h. Subsequent use of this class may result in invalid data or an access violation, especially when new and delete are called.

The problem is more likely to occur when the class contains double or __int64 data members.

(c) Microsoft Corporation 1997, All Rights Reserved. Contributions by Adam Kim, Microsoft Corporation


Additional query words: AFXDLL

Keywords: kbactivedocs kbbug kbdll kbfix kbnoupdate kbvc500fix KB170979