COMAddin propput problem

R

Raj Sahrawat

I am trying to do the following
Application.COMAddIns.Item
("MyOfficeAddin.Connect").Object = Me

in Visual C++ and am not able to set the Object property
of the COMAddin IDispatch.

The interface is defined as such in the ms office tlb file

/*********************************************************
******************************/
// Generated .IDL file (by the OLE/COM Object Viewer)
//
// typelib filename: MSO9.DLL

[
uuid(2DF8D04C-5BFA-101B-BDE5-00AA0044DE52),
version(2.1),
helpstring("Microsoft Office 9.0 Object Library"),
helpfile("vbaoff9.chm"),
helpcontext(0x00000001)
]
library Office
{
......
......
......
[
odl,
uuid(000C033A-0000-0000-C000-000000000046),
helpcontext(0x00035778),
dual,
nonextensible,
oleautomation
]
interface COMAddIn : _IMsoDispObj {
[id(00000000), propget, helpcontext(0x00035779)]
HRESULT Description([out, retval] BSTR* RetValue);
[id(00000000), propput, helpcontext(0x00035779)]
HRESULT Description([in] BSTR RetValue);
[id(0x00000003), propget, helpcontext(0x0003577b)]
HRESULT ProgId([out, retval] BSTR* RetValue);
[id(0x00000004), propget, helpcontext(0x0003577c)]
HRESULT Guid([out, retval] BSTR* RetValue);
[id(0x00000006), propget, helpcontext(0x0003577d)]
HRESULT Connect([out, retval] VARIANT_BOOL*
RetValue);
[id(0x00000006), propput, helpcontext(0x0003577d)]
HRESULT Connect([in] VARIANT_BOOL RetValue);
[id(0x00000007), propget, helpcontext(0x0003577f)]
HRESULT Object([out, retval] IDispatch**
RetValue);
[id(0x00000007), propput, helpcontext(0x0003577f)]
HRESULT Object([in] IDispatch* RetValue);
[id(0x00000008), propget, helpcontext(0x00035781)]
HRESULT Parent([out, retval] IDispatch** retval);
};

/*********************************************************
******************************/

Specifically when i do the following -

VARIANT vObject;
VariantInit(&vObject);
vObject.vt = VT_DISPATCH;
vObject.pdispVal = this; //this is my addIn class that
implements the IID_IDTExtensibility2 interface

hr = PutProperty(vCOMAddin.pdispVal, L"Object",
&vObject); /// this always fails with hr = "0x80020009"
Exception

where PutProperty method is defined as -

/*********************************************************
******************************/
STDMETHODIMP Plugin::putProperty(LPDISPATCH _disp,
LPOLESTR _pname, VARIANT *_pvalue)
{
if( _disp == null )
return( E_POINTER );
if( _pvalue == null )
return( E_POINTER );
DISPID dispid;

HRESULT hr = _disp->GetIDsOfNames(IID_NULL,
&_pname, 1, LOCALE_USER_DEFAULT, &dispid);
if( SUCCEEDED(hr) )
{
DISPID dispidput = DISPID_PROPERTYPUT;
DISPPARAMS dispparams = {NULL, NULL, 1,
1};
dispparams.rgvarg = _pvalue;
dispparams.rgdispidNamedArgs = &dispidput;

if( _pvalue->vt == VT_UNKNOWN || _pvalue-
vt == VT_DISPATCH ||
(_pvalue->vt & VT_ARRAY) ||
(_pvalue->vt & VT_BYREF) )
{
hr = _disp->Invoke(dispid,
IID_NULL, LOCALE_USER_DEFAULT,

DISPATCH_METHOD | DISPATCH_PROPERTYPUTREF,
&dispparams,
NULL,
NULL, NULL);
if( SUCCEEDED(hr) )
return( hr );
}

hr = _disp->Invoke(dispid, IID_NULL,
LOCALE_USER_DEFAULT,
DISPATCH_METHOD |
DISPATCH_PROPERTYPUT, &dispparams,
NULL,
NULL, NULL);
}

return( hr );
}
/*********************************************************
******************************/

Any help would be appreciated as I am running out of ideas

thanks
-Raj
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top