diff options
author | alexeypa@chromium.org <alexeypa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-17 22:24:48 +0000 |
---|---|---|
committer | alexeypa@chromium.org <alexeypa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-17 22:24:48 +0000 |
commit | e39e80ee2e7cfc44ffbd87cc249e00d50a6e1069 (patch) | |
tree | 509c7b4ec64e8003d65c7d3e6ab81f1ad0812070 /remoting/base | |
parent | b40ca7d30b5424f983d5c8a53f6468076f6c1ddd (diff) | |
download | chromium_src-e39e80ee2e7cfc44ffbd87cc249e00d50a6e1069.zip chromium_src-e39e80ee2e7cfc44ffbd87cc249e00d50a6e1069.tar.gz chromium_src-e39e80ee2e7cfc44ffbd87cc249e00d50a6e1069.tar.bz2 |
Added support of DISPATCH_PROPERTYPUT and DISPATCH_PROPERTYPUTREF to remoting::dispatch::Invoke().
According to MSDN (http://msdn.microsoft.com/en-us/library/windows/desktop/ms221479(v=vs.85).aspx) when IDispatch::Invoke() is used with DISPATCH_PROPERTYPUT or DISPATCH_PROPERTYPUTREF, the property setter's parameter must be named.
Review URL: https://chromiumcodereview.appspot.com/10736059
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@147106 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/base')
-rw-r--r-- | remoting/base/dispatch_win.h | 88 | ||||
-rw-r--r-- | remoting/base/dispatch_win.h.pump | 11 |
2 files changed, 90 insertions, 9 deletions
diff --git a/remoting/base/dispatch_win.h b/remoting/base/dispatch_win.h index aa20710..9578ab8 100644 --- a/remoting/base/dispatch_win.h +++ b/remoting/base/dispatch_win.h @@ -134,8 +134,17 @@ HRESULT Invoke(IDispatch* object, disp_result = &result; - // Invoke the method. + // Invoke the method passing the parameters via the DISPPARAMS structure. + // DISPATCH_PROPERTYPUT and DISPATCH_PROPERTYPUTREF require the parameter of + // the property setter to be named, so |cNamedArgs| and |rgdispidNamedArgs| + // structure members should be initialized. DISPPARAMS disp_params = { NULL, NULL, 0, 0 }; + DISPID dispid_named = DISPID_PROPERTYPUT; + if (flags == DISPATCH_PROPERTYPUT || flags == DISPATCH_PROPERTYPUTREF) { + disp_params.cNamedArgs = 1; + disp_params.rgdispidNamedArgs = &dispid_named; + } + hr = object->Invoke(disp_id, IID_NULL, LOCALE_USER_DEFAULT, flags, &disp_params, disp_result, NULL, NULL); if (FAILED(hr)) @@ -175,8 +184,17 @@ HRESULT Invoke(IDispatch* object, if (FAILED(hr)) return hr; - // Invoke the method. + // Invoke the method passing the parameters via the DISPPARAMS structure. + // DISPATCH_PROPERTYPUT and DISPATCH_PROPERTYPUTREF require the parameter of + // the property setter to be named, so |cNamedArgs| and |rgdispidNamedArgs| + // structure members should be initialized. DISPPARAMS disp_params = { disp_args, NULL, 1, 0 }; + DISPID dispid_named = DISPID_PROPERTYPUT; + if (flags == DISPATCH_PROPERTYPUT || flags == DISPATCH_PROPERTYPUTREF) { + disp_params.cNamedArgs = 1; + disp_params.rgdispidNamedArgs = &dispid_named; + } + hr = object->Invoke(disp_id, IID_NULL, LOCALE_USER_DEFAULT, flags, &disp_params, disp_result, NULL, NULL); if (FAILED(hr)) @@ -222,8 +240,17 @@ HRESULT Invoke(IDispatch* object, if (FAILED(hr)) return hr; - // Invoke the method. + // Invoke the method passing the parameters via the DISPPARAMS structure. + // DISPATCH_PROPERTYPUT and DISPATCH_PROPERTYPUTREF require the parameter of + // the property setter to be named, so |cNamedArgs| and |rgdispidNamedArgs| + // structure members should be initialized. DISPPARAMS disp_params = { disp_args, NULL, 2, 0 }; + DISPID dispid_named = DISPID_PROPERTYPUT; + if (flags == DISPATCH_PROPERTYPUT || flags == DISPATCH_PROPERTYPUTREF) { + disp_params.cNamedArgs = 1; + disp_params.rgdispidNamedArgs = &dispid_named; + } + hr = object->Invoke(disp_id, IID_NULL, LOCALE_USER_DEFAULT, flags, &disp_params, disp_result, NULL, NULL); if (FAILED(hr)) @@ -274,8 +301,17 @@ HRESULT Invoke(IDispatch* object, if (FAILED(hr)) return hr; - // Invoke the method. + // Invoke the method passing the parameters via the DISPPARAMS structure. + // DISPATCH_PROPERTYPUT and DISPATCH_PROPERTYPUTREF require the parameter of + // the property setter to be named, so |cNamedArgs| and |rgdispidNamedArgs| + // structure members should be initialized. DISPPARAMS disp_params = { disp_args, NULL, 3, 0 }; + DISPID dispid_named = DISPID_PROPERTYPUT; + if (flags == DISPATCH_PROPERTYPUT || flags == DISPATCH_PROPERTYPUTREF) { + disp_params.cNamedArgs = 1; + disp_params.rgdispidNamedArgs = &dispid_named; + } + hr = object->Invoke(disp_id, IID_NULL, LOCALE_USER_DEFAULT, flags, &disp_params, disp_result, NULL, NULL); if (FAILED(hr)) @@ -331,8 +367,17 @@ HRESULT Invoke(IDispatch* object, if (FAILED(hr)) return hr; - // Invoke the method. + // Invoke the method passing the parameters via the DISPPARAMS structure. + // DISPATCH_PROPERTYPUT and DISPATCH_PROPERTYPUTREF require the parameter of + // the property setter to be named, so |cNamedArgs| and |rgdispidNamedArgs| + // structure members should be initialized. DISPPARAMS disp_params = { disp_args, NULL, 4, 0 }; + DISPID dispid_named = DISPID_PROPERTYPUT; + if (flags == DISPATCH_PROPERTYPUT || flags == DISPATCH_PROPERTYPUTREF) { + disp_params.cNamedArgs = 1; + disp_params.rgdispidNamedArgs = &dispid_named; + } + hr = object->Invoke(disp_id, IID_NULL, LOCALE_USER_DEFAULT, flags, &disp_params, disp_result, NULL, NULL); if (FAILED(hr)) @@ -393,8 +438,17 @@ HRESULT Invoke(IDispatch* object, if (FAILED(hr)) return hr; - // Invoke the method. + // Invoke the method passing the parameters via the DISPPARAMS structure. + // DISPATCH_PROPERTYPUT and DISPATCH_PROPERTYPUTREF require the parameter of + // the property setter to be named, so |cNamedArgs| and |rgdispidNamedArgs| + // structure members should be initialized. DISPPARAMS disp_params = { disp_args, NULL, 5, 0 }; + DISPID dispid_named = DISPID_PROPERTYPUT; + if (flags == DISPATCH_PROPERTYPUT || flags == DISPATCH_PROPERTYPUTREF) { + disp_params.cNamedArgs = 1; + disp_params.rgdispidNamedArgs = &dispid_named; + } + hr = object->Invoke(disp_id, IID_NULL, LOCALE_USER_DEFAULT, flags, &disp_params, disp_result, NULL, NULL); if (FAILED(hr)) @@ -461,8 +515,17 @@ HRESULT Invoke(IDispatch* object, if (FAILED(hr)) return hr; - // Invoke the method. + // Invoke the method passing the parameters via the DISPPARAMS structure. + // DISPATCH_PROPERTYPUT and DISPATCH_PROPERTYPUTREF require the parameter of + // the property setter to be named, so |cNamedArgs| and |rgdispidNamedArgs| + // structure members should be initialized. DISPPARAMS disp_params = { disp_args, NULL, 6, 0 }; + DISPID dispid_named = DISPID_PROPERTYPUT; + if (flags == DISPATCH_PROPERTYPUT || flags == DISPATCH_PROPERTYPUTREF) { + disp_params.cNamedArgs = 1; + disp_params.rgdispidNamedArgs = &dispid_named; + } + hr = object->Invoke(disp_id, IID_NULL, LOCALE_USER_DEFAULT, flags, &disp_params, disp_result, NULL, NULL); if (FAILED(hr)) @@ -534,8 +597,17 @@ HRESULT Invoke(IDispatch* object, if (FAILED(hr)) return hr; - // Invoke the method. + // Invoke the method passing the parameters via the DISPPARAMS structure. + // DISPATCH_PROPERTYPUT and DISPATCH_PROPERTYPUTREF require the parameter of + // the property setter to be named, so |cNamedArgs| and |rgdispidNamedArgs| + // structure members should be initialized. DISPPARAMS disp_params = { disp_args, NULL, 7, 0 }; + DISPID dispid_named = DISPID_PROPERTYPUT; + if (flags == DISPATCH_PROPERTYPUT || flags == DISPATCH_PROPERTYPUTREF) { + disp_params.cNamedArgs = 1; + disp_params.rgdispidNamedArgs = &dispid_named; + } + hr = object->Invoke(disp_id, IID_NULL, LOCALE_USER_DEFAULT, flags, &disp_params, disp_result, NULL, NULL); if (FAILED(hr)) diff --git a/remoting/base/dispatch_win.h.pump b/remoting/base/dispatch_win.h.pump index 57439e5..c6a6d5a 100644 --- a/remoting/base/dispatch_win.h.pump +++ b/remoting/base/dispatch_win.h.pump @@ -162,7 +162,10 @@ $for ARG [[ ]] - // Invoke the method. + // Invoke the method passing the parameters via the DISPPARAMS structure. + // DISPATCH_PROPERTYPUT and DISPATCH_PROPERTYPUTREF require the parameter of + // the property setter to be named, so |cNamedArgs| and |rgdispidNamedArgs| + // structure members should be initialized. $if ARITY > 0 [[ DISPPARAMS disp_params = { disp_args, NULL, $(ARITY), 0 }; @@ -170,6 +173,12 @@ $if ARITY > 0 [[ DISPPARAMS disp_params = { NULL, NULL, 0, 0 }; ]] + DISPID dispid_named = DISPID_PROPERTYPUT; + if (flags == DISPATCH_PROPERTYPUT || flags == DISPATCH_PROPERTYPUTREF) { + disp_params.cNamedArgs = 1; + disp_params.rgdispidNamedArgs = &dispid_named; + } + hr = object->Invoke(disp_id, IID_NULL, LOCALE_USER_DEFAULT, flags, &disp_params, disp_result, NULL, NULL); if (FAILED(hr)) |