ID: Q175618
The information in this article applies to:
You get the error DISP_E_PARAMNOTFOUND when you try to set a property.
The DISPPARAMS structure must be initialized in a special way for DISPATCH_PROPERTYPUT or DISPATCH_PROPERTYPUTREF.
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;
This behavior is by design.
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.
"Inside OLE," Kraig Brocksmidt, Chapter 14, "The IDispatch interface" section, Microsoft Press, 1995
Additional query words: Visual C++ DISP_E_PARAMNOTFOUND "Parameter not found"
Keywords : kberrmsg kbnokeyword kbKernBase kbGrpKernBase
Version : WINNT:
Platform : winnt
Issue type : kbprb
Last Reviewed: October 29, 1997