Microsoft KB Archive/168831

From BetaArchive Wiki
< Microsoft KB Archive
Revision as of 15:34, 18 July 2020 by 3155ffGd (talk | contribs) (importing KB archive)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Knowledge Base


PRB: Older MFC OCX Controls Incompatible with Visual Basic 4.0

Article ID: 168831

Article Last Modified on 7/16/2004



APPLIES TO

  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 16-bit Enterprise Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition



This article was previously published under Q168831

SYMPTOMS

Upon placing an OCX control on a Visual Basic form, the control will ASSERT or cause a General Protection Fault. The most common asserts are as follows:

  • Assertion Failure in CTLPROP.CPP Line 768
  • Assertion Failure in CTLMODUL.CPP Line 128

The control will continue to run in most cases, but will not function properly.

CAUSE

OLE Custom Controls (OCX Controls) created using the Microsoft Foundation Classes (MFC) that ship with Microsoft Visual C++ version 2.0 or earlier for 32-bit development and Microsoft Visual C++ 1.51 or earlier for 16-bit development will not work properly in Visual Basic 4.0.

The OCX standards and implementations have changed such that some minor incompatibilities have been created. The following MFC code raises the assertion when Visual Basic passes NULL as parameters:

   STDMETHODIMPCOleControl::XPerPropertyBrowsing::GetPredefinedStrings(
       DISPID dispid,
   CALPOLESTR FAR* lpcaStringsOut, CADWORD FAR*
    lpcaCookiesOut)
   {
       ...
       METHOD_MANAGE_STATE(COleControl,PerPropertyBrowsing)
       ...
       ASSERT_POINTER(lpcaStringsOut,CALPOLESTR);
       ASSERT_POINTER(lpcaCookiesOut, CADWORD);
       ...
   }
                

RESOLUTION

Upgrade to Visual C++ 2.1 or higher for 32-bit development and Visual C++ 1.52 or higher for 16-bit development.

STATUS

Microsoft has confirmed this to be a problem with Visual C++ version 2.0 and earlier for 32-bit development and Visual C++ 1.51 and earlier for 16-bit development.

(c) Microsoft Corporation 1997, All Rights Reserved. Contributions by Troy Cambra, Microsoft Corporation


Additional query words: kbMFC kbVBp400 kbdse kbDSupport kbVBp kbVC

Keywords: kbprb KB168831