Re: Обертка для С++ класса. Нужен пример.
От: George Seryakov Россия  
Дата: 03.10.02 01:55
Оценка:
Здравствуйте Цунцуяби, Вы писали:


Ц>Пробовал написать по примерам с 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;
Ц>}
Ц>


Ц>Может быть его надо где-то сохранять ?


Да. В статическом члене. Типа

    // где- то в *.h, в определении класса
    static map<short, CComPtr<IDispatch> arrayItems;

STDMETHODIMP CComXcl::Item(short n, LPDISPATCH *retval)
{
...
    if(arrayItems.find(n) != arrayItems.end()) {
    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;
        }
       arrayItems[n] = pDisp; 
        *retval = pDisp;
        return S_OK;
    } else {
        *retval = arrayItems[n].Detach();
        return S_OK;
    }
}


Писал без компилятора, могут быть ошибки. Но где-то так.
GS
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.