У меня есть проект в котором имеется некоторая иерархия классов.
class Ycl
{
int value;
public:
...
int GetValue(void){return value;}
void SetValue(int nv){value=nv;}
};
class Xcl
{
Ycl *y;
...
public:
Ycl &Item(int i){return y[i];}
};
В С++ я могу написать так
Xcl x;
x.Item(1).SetValue(10);
Мне необходима обертка (COM,ATL)
чтобы я мог также писать и в VB
x.Item(1).value=10
Не поможет ли кто с примером ?
Пробовал написать по примерам с ATL, но я пока не понимаю всю картину вцелом
и поэтому смущает, что каждый раз когда я вызываю метод Item
у меня каждый раз создается и инициализируется объект
STDMETHODIMP CComXcl::Item(short n, LPDISPATCH *retval)
{
CComObject<CComYcl>* p = new CComObject<CComYcl>;
p->DoNotForgetInitItem();
IDispatch* pDisp;
HRESULT res=p->QueryInterface(IID_IDispatch, (void**)&pDisp);
if (res != S_OK) return E_POINTER;
*retval = pDisp;
return S_OK;
}
Может быть его надо где-то сохранять ?
А вообше у меня получается
o1=x.Item(1)
o2=x.Item(1)
o1.value=1
o2.value=2
o1.value != o2.value
что-то видно делаю не так, а ?