Microsoft KB Archive/131044

= FIX: ClassWizard Incorrectly Reads LPDISPATCH Params from .TLB =

Article ID: 131044

Article Last Modified on 12/1/2003

-

APPLIES TO

 The ClassWizard, when used with:  Microsoft Visual C++ 1.5 Professional Edition

 Microsoft Visual C++ 1.51

 Microsoft Visual C++ 1.52 Professional Edition

 Microsoft Visual C++ 2.0 Professional Edition</li></ul>

 Microsoft Visual C++ 2.1</li></ul>

 Microsoft Visual C++ 4.0 Standard Edition</li></ul>

 Microsoft Visual C++ 4.1 Subscription</li></ul>

 Microsoft Visual C++ 4.2 Enterprise Edition</li></ul>

 Microsoft Visual C++ 4.2 Professional Edition</li></ul> </li></ul>

-

<div class="notice_section">

This article was previously published under Q131044

<div class="symptoms_section">

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.

<div class="resolution_section">

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); }

<div class="status_section">

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.

Keywords: kbbug kbfix kbvc500fix kbautomation kbwizard KB131044

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.