PRB: Error 0x80020004 (-2147352572) When Setting a Property
Article ID: 175618
Article Last Modified on 7/11/2005
APPLIES TO
- Microsoft Platform Software Development Kit-January 2000 Edition
This article was previously published under Q175618
MORE INFORMATION
This behavior is necessary because some OLE Automation servers, as a result
of their language structure, cannot differentiate between a property get or
put and a method call. This specially named argument case is used to
determine what is actually going on.
REFERENCES
"Inside OLE," Kraig Brocksmidt, Chapter 14, "The IDispatch interface"
section, Microsoft Press, 1995
SYMPTOMS
You get the error DISP_E_PARAMNOTFOUND when you try to set a property.
CAUSE
The DISPPARAMS structure must be initialized in a special way for
DISPATCH_PROPERTYPUT or DISPATCH_PROPERTYPUTREF.
RESOLUTION
When you use IDispatch::Invoke() with DISPATCH_PROPERTYPUT or
DISPATCH_PROPERTYPUTREF, you have to specially initialize the cNamedArgs
and rgdispidNamedArgs elements of your DISPPARAMS structure with the
following:
DISPID dispidNamed = DISPID_PROPERTYPUT;
dispparams.cNamedArgs = 1;
dispparams.rgdispidNamedArgs = &dispidNamed;
STATUS
This behavior is by design.
Additional query words: Visual C++ DISP_E_PARAMNOTFOUND "Parameter not found"
Keywords: kberrmsg kbprb KB175618