Re: Using the VB/VBA Collection class in C++ code
Hmm, the code looks fine to me... You can try using 0x409
for the locale (e.g. US English), though that shouldn't make
difference.
Try accessing the Item property then. This has DISPID_VALUE (0)
and has a single VARIANT argument (parameterized property)
so you have to supply it in DISPPARAMS. By passing a VT_BSTR
VARIANT containing one of the keys you should get the corresponding
value.
--
=====================================
Alexander Nickolov
Microsoft MVP [VC], MCSD
email: agnickolov@mvps.org
MVP VC FAQ: http://www.mvps.org/vcfaq
=====================================
"Rob Perkins" <finitedev@community.nospam> wrote in message
news:4ljba4F26f3tU1@individual.net...
Alexander Nickolov wrote:
Well, yes, I should have spotted it the first time... You are
passing NULL for DISPPARAMS, hence your E_INVALIDARG.
You must pass a valid structure specifying no parameters.
OK, the code now looks like this:
In VB:
Private Sub Command2_Click()
Dim c As New Collection, m As New MyATLObject
c.Add "hi", "1"
c.Add "there", "2"
Set m.Collection = c
End Sub
And the PropertyPutRef:
STDMETHODIMP MyATLObject::putref_Collection(IDispatch* newVal)
{
HRESULT hr = S_OK;
VARIANT result;
VariantInit(&result);
DISPPARAMS dp;
dp.cArgs=0;
dp.cNamedArgs=0;
dp.rgdispidNamedArgs=NULL;
dp.rgvarg=NULL;
EXCEPINFO ei;
UINT puArgErr
hr = newVal->Invoke(DISPID_NEWENUM,
IID_NULL,
(LCID)MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),
SORT_DEFAULT),
DISPATCH_PROPERTYGET,
&dp,
&result,
&ei,
&puArgErr);
return S_OK;
}
That's the body of code which is returning "Member not found" off the
Invoke method.
Rob