FIX: ClassWizard Incorrectly Reads LPDISPATCH Params from .TLB (131044)
The information in this article applies to:
- The ClassWizard, when used with:
- Microsoft Visual C++ for Windows, 16-bit edition 1.5
- Microsoft Visual C++ for Windows, 16-bit edition 1.51
- Microsoft Visual C++ for Windows, 16-bit edition 1.52
- Microsoft Visual C++, 32-bit Editions 2.0
- Microsoft Visual C++, 32-bit Editions 2.1
- Microsoft Visual C++, 32-bit Editions 4.0
- Microsoft Visual C++, 32-bit Editions 4.1
- Microsoft Visual C++, 32-bit Enterprise Edition 4.2
- Microsoft Visual C++, 32-bit Professional Edition 4.2
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.
Modification Type: | Major | Last Reviewed: | 12/1/2003 |
---|
Keywords: | kbAutomation kbBug kbfix kbVC500fix kbwizard KB131044 |
---|
|