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
- Microsoft Visual C++ 4.0 Standard Edition
- Microsoft Visual C++ 4.1 Subscription
- Microsoft Visual C++ 4.2 Enterprise Edition
- Microsoft Visual C++ 4.2 Professional Edition
This article was previously published under Q131044
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.
Keywords: kbbug kbfix kbvc500fix kbautomation kbwizard KB131044