FIX: MFCVBX with MODEL_fChildrenOk Set Causes GP Fault

Last reviewed: September 19, 1997
Article ID: Q142350
1.50 1.51 1.52 WINDOWS kbprg kbbuglist kbfixlist

The information in this article applies to:

  • The Microsoft Foundation Classes (MFC) included with: Microsoft Visual C++ for Windows, versions 1.5, 1.51, and 1.52

SYMPTOMS

There's a bug in the MFCVBX sample that's described in the following article in the Microsoft Knowledge Base:

   ARTICLE-ID: Q123377
   TITLE     : SAMPLE: MFCVBX Implements a VBX Control Using MFC

The MFCVBX sample shows how to create a VBX control using MFC. If this sample is used as an approach for creating a VBX control and the MODEL_fChildrenOk flag is also used, then the VBX control causes a general protection (GP) fault.

CAUSE

A GP fault could occur for a number of reasons, but in particular it will happen if a combo box is placed on the VBX control.

The sample code does not correctly handle the case where a message handler needs to call the default message procedure. It does not set MFC's internal structure, which stores the previous message. Therefore, when the default message handler is called, it is called with the incorrect message (and parameters).

RESOLUTION

Modify the CircleCtlProc function located in the Mfcvbx.cpp file in the sample. Make the following changes:

  1. Add the following declaration before the CircleCtlProc function:

    extern MSG NEAR _afxLastMsg;

  2. Make the following modifications to the CircleCtlProc function:

    Change this line:

          LRESULT lResult = pCtl->WindowProc(msg,wp,lp);
    

    To this code:

          MSG oldState = _afxLastMsg;
          _afxLastMsg.message = msg;
          _afxLastMsg.wParam = wp;
          _afxLastMsg.lParam = lp;
    

          LRESULT lResult = pCtl->WindowProc(msg,wp,lp);
    

          _afxLastMsg = oldState;
    

STATUS

Microsoft has confirmed this to be a bug in the MFCVBX sample. This problem has been corrected. To obtain the latest version of the sample, please see the following article in the Microsoft Knowledge Base:

   ARTICLE-ID: Q123377
   TITLE     : SAMPLE: MFCVBX Implements a VBX Control Using MFC

REFERENCES

For more information on the MODEL_fChildrenOk flag and what it is used for, please see:

Visual Basic 3.0:

   VB API Reference Help.Data Structures.MODEL Flags

Visual Control Pack 1.0:
   VCP CDK Help.Data Structures.MODEL Flags


Additional reference words: 1.50 1.51 1.52b 2.50 2.51 2.52 2.52b vb
CVBControl CDK
KBCategory: kbprg kbbuglist kbfixlist
KBSubcategory: MfcVBX
Keywords : kb16bitonly MfcVBX kbbuglist kbfixlist kbprg
Technology : kbMfc
Version : 1.50 1.51 1.52
Platform : WINDOWS
Solution Type : kbfix


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: September 19, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.