FIX: ClassWizard Incorrectly Reads LPDISPATCH Params from .TLB

ID: Q131044


The information in this article applies to:
  • The ClassWizard, included with:
    • Microsoft Visual C++ for Windows, 16-bit edition, versions 1.5, 1.51, 1.52
    • Microsoft Visual C++, 32-bit Editions, versions 2.0, 2.1, 4.0, 4.1, 4.2


SYMPTOMS

ClassWizard generates improper COleDispatchDriver derived member functions for methods that contain one or more LPDISPATCH* parameters. Specifically, ClassWizard generates member functions using a LPDISPATCH parameter instead of LPDISPATCH*. In other words, the asterisk (*) is missing.


RESOLUTION

To correct this problem, you must edit the COleDispatchDriver derived member directly.

For example, assume there is a type library (.TLB file) for an object that supports a method that returns a void and accepts an LPDISPATCH* as its only parameter. When ClassWizard reads the .TLB file, it generates a new class from COleDispatchDriver. The method for the member function that returns a void and accepts an LPDISPATCH* parameter ends up with this incorrect definition:


   void ITestObject::TestMethod(LPDISPATCH lpDispPtr)
   {
      static BYTE BASED_CODE parms[] =
         VTS_DISPATCH;
      InvokeHelper(0x1, DISPATCH_METHOD, VT_EMPTY, NULL, parms,
         lpDispPtr);
   } 
To correct this problem, change the parameter type to LPDISPATCH*, and modify the parms[] array so that it contains a corresponding VTS_PDISPATCH entry instead of VTS_DISPATCH, as illustrated here:

   void ITestObject::TestMethod(LPDISPATCH* lpDispPtr)
   {
      static BYTE BASED_CODE parms[] =
         VTS_PDISPATCH;
      InvokeHelper(0x1, DISPATCH_METHOD, VT_EMPTY, NULL, parms,
         lpDispPtr);
   } 


STATUS

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

Additional query words:

Keywords : kbole kbwizard kbMFC kbVC150bug kbVC151bug kbVC152bug kbVC200bug kbVC210bug kbVC400bug kbVC410bug kbVC420bug kbVC500fix kbGrpDSTools
Version : 1.50 1.51 1.52 2.00 2.10 4.00 4.10 4.20
Platform : NT WINDOWS
Issue type : kbbug


Last Reviewed: July 30, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.