Существует такая необходимость, так есть некоторая иерархия объектов, т.е. подчиненные объекты должны иметь ссылочную информацию на их собственников, но выносить ее в интерфейс не хотелось бы. Поэтому я бы хочу создать объект класса С++, инициализировать, а потом уже вернуть ссылку на COM-интерфейс, который он реализует.
COM-объекты пишутся при помощи ATL.
Вопрос: как правильно инициализировать в этом случае объект?
Здравствуйте, misha_sk, Вы писали:
_>Существует такая необходимость, так есть некоторая иерархия объектов, т.е. подчиненные объекты должны иметь ссылочную информацию на их собственников, но выносить ее в интерфейс не хотелось бы. Поэтому я бы хочу создать объект класса С++, инициализировать, а потом уже вернуть ссылку на COM-интерфейс, который он реализует. _>COM-объекты пишутся при помощи ATL. _>Вопрос: как правильно инициализировать в этом случае объект?
Здравствуйте, SergH, Вы писали:
_>>Существует такая необходимость, так есть некоторая иерархия объектов, т.е. подчиненные объекты должны иметь ссылочную информацию на их собственников, но выносить ее в интерфейс не хотелось бы.
SH>
Здравствуйте, George Seryakov, Вы писали:
GS>Ну и неплохо сослаться на Q181265, хотя трюк с поднятием счетчика (QI) там не описан.
Я его не читал до этого момента Мне на этом же форуме рассказали, как правильно создавать объекты. А поднятие счётчика это же, к сожалению, не трюк, а жизеннная необходимость, странно что он не описан.
Делай что должно, и будь что будет
Re[3]: Создание COM - объекта без CoCreateInstance
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Это почему трюк? Тебя попросили в pVal записть указатель на интерфейс. Самый разумный способ это сделать — QI. Это — основы!
Нет, в рамках С++ парадигмы саму разумный способ — откастить указатель на объект на указатель на интерфейс. И это будет правильно, за тем исключением, что счетчик ссылок будет нулевой. Его нужно поднять либо AddRef либо через QI. В чем и состоит трюк.
GS
Re[5]: Создание COM - объекта без CoCreateInstance
[]
GS>Нет, в рамках С++ парадигмы саму разумный способ — откастить указатель на объект на указатель на интерфейс. И это будет правильно, за тем исключением, что счетчик ссылок будет нулевой. Его нужно поднять либо AddRef либо через QI. В чем и состоит трюк.
Что есть С++ парадигма?
З.Ы. Работаешь с СОМ — работай по правилам СОМ, а не С++.
Re[6]: Создание COM - объекта без CoCreateInstance
Здравствуйте, Alexey Shirshov, Вы писали:
GS>>Нет, в рамках С++ парадигмы саму разумный способ — откастить указатель на объект на указатель на интерфейс. И это будет правильно, за тем исключением, что счетчик ссылок будет нулевой. Его нужно поднять либо AddRef либо через QI. В чем и состоит трюк.
AS>Что есть С++ парадигма?
А С++ парадигма — это то, что ты спрашивал: как создать объект не через вызовы комовской библиотеки, а как нечто в скоупе С++ кода.
AS>З.Ы. Работаешь с СОМ — работай по правилам СОМ, а не С++.
Спорить можно, но бесполезно.
GS
Re[7]: Создание COM - объекта без CoCreateInstance
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Здравствуйте, George Seryakov, Вы писали:
AS>[]
AS>У С++ нет парадигмы. Это язык подерживающий множество парадигм. Мне здается, что ты не совсем представляешь, что есть парадигма.