![]() |
|
![]() ![]() ![]() |
|
RastaDja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 1.11.2010 Репутация: 1 Всего: 5 |
Здраствуйте.
есть такая задача: у нас есть COM интерфейс TreeLib.TreeMap, который реализует сохранение данных в карте map<CComBSTR, CComVariant> m_varMap; в качестве данных можэт быть любая Варыант переменная. предполагается, что в данные можно добавить и другой TreeLib.TreeMap обьект. Таким образом будет строится дерево. Вопрос: Как получить ссылку на Парент обект, и как эту ссылку хранить. Спасибо -------------------- The more closely you look at one thing, the less closely can you see something else. |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
В COM'е нет встроенного понятия parent'а (есть агрегация, но это не то). Так что parent'а придется приделывать руками (как и любую другую проперть в AcitveX или метод в голом COM'е), и устанавливать так же вручную.
В принципе, если объект именно ActiveX (т.е. унаследован от IDispatch), ему можно принудительно прописать проперть Parent (если таковая у него найдется). Делать это при вставке объекта в m_varMap |
|||
|
||||
RastaDja |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 1.11.2010 Репутация: 1 Всего: 5 |
в качестве _parent использую IDispatch* но ничего не получается. как вытенуть ссылку на и IDispatch* из map<CComBSTR, CComVariant> m_varMaр или правельнее CTreeClassMap* _parent; но тогда как получить CTreeClassMap? Добавлено через 2 минуты и 21 секунду
такой код не работает ![]() -------------------- The more closely you look at one thing, the less closely can you see something else. |
||||
|
|||||
xvr |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
И вообще подход неверный - надо не вытягивать ссылку на родителя из уже вставленного в m_varMaр Варианта, а устанавливать ему (Варианту) ссылку на себя при вставке его в m_varMaр Т.е. как то так (псевдокод):
Это сообщение отредактировал(а) xvr - 3.11.2010, 12:26 |
||||
|
|||||
RastaDja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 1.11.2010 Репутация: 1 Всего: 5 |
GetDispID("Paren"); у меня нет такой ф-ии ![]() Добавлено через 1 минуту и 42 секунды извеняюс GetIDsOfMames -------------------- The more closely you look at one thing, the less closely can you see something else. |
|||
|
||||
RastaDja |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 1.11.2010 Репутация: 1 Всего: 5 |
получаю ошибку error C2594: 'type cast' : ambiguous conversions from 'class CTreeClassMap *const ' to 'struct IDispatch *' у меня VS6 Добавлено через 12 минут и 11 секунд
так ошибок не выдаёт ![]() ща буду пробовать как работает -------------------- The more closely you look at one thing, the less closely can you see something else. |
||||
|
|||||
xvr |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
2й вариант немного перебор, достаточно сделать
PS. Не забудьте добавить в свой класс реализацию проперти 'ParentFF' PPS. Тут тоже ошибка:
|
||||||
|
|||||||
RastaDja |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 1.11.2010 Репутация: 1 Всего: 5 |
я так делал, но тут ошибка преобразования Добавлено через 4 минуты и 53 секунды
делаю так, но программа вылетает -------------------- The more closely you look at one thing, the less closely can you see something else. |
||||
|
|||||
xvr |
|
||||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Не должно. Букву 'L' перед строкой не забыли?
Кроме того, пригляделся к коду, там еще ошибка:
Это сообщение отредактировал(а) xvr - 3.11.2010, 16:18 |
||||||||||||
|
|||||||||||||
RastaDja |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 1.11.2010 Репутация: 1 Всего: 5 |
спасибо за помощь, я нашол решение.
Клас
Add функция
Property
ещё раз большое спасибо ![]() но я ещё на 100% не уверен в правельной работе кода Добавлено через 1 минуту и 25 секунд З.Ы поэтому тему не закрываю -------------------- The more closely you look at one thing, the less closely can you see something else. |
||||||
|
|||||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Вроде все правильно
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |