PRB: Add Method/Add Property Adds To All Interfaces (168528)
The information in this article applies to:
- Microsoft Visual C++, 32-bit Enterprise Edition 5.0
- Microsoft Visual C++, 32-bit Enterprise Edition 6.0
- Microsoft Visual C++, 32-bit Professional Edition 5.0
- Microsoft Visual C++, 32-bit Professional Edition 6.0
- Microsoft Visual C++, 32-bit Learning Edition 6.0
This article was previously published under Q168528 SYMPTOMS
In a wizard-generated application that supports Automation, you can use the
Add Method or Add Property on the popup menu in the ClassView or in the
ClassWizard's Automation tab dialog box to add a method or a property to a
dispinterface. The method or the property is added to all of the
dispinterfaces in the project's .odl file. This is incorrect. It should
only be added to one interface.
CAUSE
When a dispinterface is created by either ClassWizard or the New Class from
the ClassView, the following code skeleton is added to the project's .ODL
file:
[ uuid(0C4A40A4-9B05-11D0-81EF-00AA00B92AB3) ]
dispinterface ITesting
{
properties:
// NOTE - ClassWizard will maintain property information here.
// Use extreme caution when editing this section.
//{{AFX_ODL_PROP(CTestingDoc)
//}}AFX_ODL_PROP
methods:
// NOTE - ClassWizard will maintain method information here.
// Use extreme caution when editing this section.
//{{AFX_ODL_METHOD(CTestingDoc)
//}}AFX_ODL_METHOD
};
The AFX_ODL_PROP() and AFX_ODL_METHOD() in the comments are used by the
ClassWizard to maintain method/property information. They also specify the
object type of the dispinterface. For example, in the sample code above,
the dispinterface ITesting is associated with CTestingDoc object. If you
created a new dispinterface by copying and pasting an existing
dispinterface without making any changes, ClassWizard would be confused if
you tried to add a new method or a new property using either the
ClassWizard or the popup menu's Add Method/Add Property. Hence, the
property or the method is added to both interfaces.
RESOLUTION
To work around the problem, you can use any of the following
methods:
- Use ClassWizard to add a class as follows:
- Launch the ClassWizard and click the Automation tab.
- Click "Add Class..." and choose "New...".
- In the New Class dialog box, type a class name and make sure its base
class is a CCmdTarget class or its derived classes.
- In the Automation group, select "Createable by type ID:".
- This creates a new class and its disinterface. The interface is
appended to the end of the existing .ODL file.
- Use the New Class option on the popup menu in the ClassView to add a
class as follows:
- In the ClassView popup menu, click "New Class".
- Follow steps c, d and e above to create a new class and its
dispinterface.
- Remove the comments you copied over from an existing dispinterface.
Notice if the ClassWizard-required comments are deleted, you cannot add
methods or properties to the interface using the ClassWizard or the
popup menu.
STATUS
Modification Type: | Major | Last Reviewed: | 12/2/2003 |
---|
Keywords: | kbprb kbwizard KB168528 |
---|
|