Почему это падает?
От: Аноним  
Дата: 23.03.09 15:42
Оценка:
У меня есть COM контрол. Внутри него я создаю массив COM объектов через CAtlArray< CComPtr<..>>, сами COM обхъекты для этого массива создаю через CoCreateInstance и заношу в масисв через Add

Каждый элемент этого массива может быть запрошен извне через функцию GetElement(IUnknown** pntr). Этот возврат я делаю прочсто через присвоение pntr к указателю на элемент моего массива

Так вот. В конце, если я делаю на моем массиве RemoveAll — то все падает

Где закралась ошибка? Неправильно заполняю массив или неправльно отдаю наверх его елементы?
Re: Почему это падает?
От: migel  
Дата: 24.03.09 04:31
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Где закралась ошибка? Неправильно заполняю массив или неправльно отдаю наверх его елементы?
AddRef для отдаваемого элемента делаеш?
Re[2]: Почему это падает?
От: Аноним  
Дата: 24.03.09 07:25
Оценка:
Здравствуйте, migel, Вы писали:

M>AddRef для отдаваемого элемента делаеш?


У CCOmPtr нету AddRef
Re[3]: Почему это падает?
От: migel  
Дата: 24.03.09 08:08
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>У CCOmPtr нету AddRef

CCOmPtr<IUnknown> spPtr
spPtr->AddRef();

не работает?
... << RSDN@Home 1.2.0 alpha 4 rev. 1090>>
Re[4]: Почему это падает?
От: Аноним  
Дата: 24.03.09 08:12
Оценка:
Здравствуйте, migel, Вы писали:

error C2248: 'ATL::_NoAddRefReleaseOnCComPtr<T>::AddRef' : cannot access private member declared in class 'ATL::_NoAddRefReleaseOnCComPtr<T>'

Re[5]: Почему это падает?
От: migel  
Дата: 24.03.09 08:34
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, migel, Вы писали:


А>

А>error C2248: 'ATL::_NoAddRefReleaseOnCComPtr<T>::AddRef' : cannot access private member declared in class 'ATL::_NoAddRefReleaseOnCComPtr<T>'

Аха значит это 2008 студия
ну тогда делай
CopyTo(...)
... << RSDN@Home 1.2.0 alpha 4 rev. 1090>>
Re[6]: Почему это падает?
От: Аноним  
Дата: 24.03.09 08:40
Оценка:
Здравствуйте, migel, Вы писали:

M>Аха значит это 2008 студия

Да

M>ну тогда делай

M>CopyTo(...)

Это откуда? Чей метод? Копировать что и куда?
Re[7]: Почему это падает?
От: migel  
Дата: 24.03.09 08:51
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, migel, Вы писали:


M>>Аха значит это 2008 студия

А>Да

M>>ну тогда делай

M>>CopyTo(...)

А>Это откуда? Чей метод? Копировать что и куда?

HRESULT CComPTRBase<T>::CopyTo(T** ppT);

то есть твой метод возвращения элемента коллекции должен делать вот так
// предположительно
HRESLT MyCollectionObj::get_Item(VARIANT index, IUnknown** ppItem)
{
 // Проверки параметров опущены
 int index_in = GetIndex(index); // получаем индекс из варианта
 CComPtr<IUnknown>& spObj = my_vector[index_in]; // берем ссылку из коллекции 

 // возвращаем объект и делаем AddRef
 return spObj.CopyTo(ppItem);
}
... << RSDN@Home 1.2.0 alpha 4 rev. 1090>>
Re[8]: Почему это падает?
От: Аноним  
Дата: 24.03.09 08:55
Оценка:
Здравствуйте, migel, Вы писали:

Спасибо большое. Ща буду пробовать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.