![]() |
|
|
![]()
|
|
| RastaDja |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 1.11.2010 Репутация: 1 Всего: 5 |
Доброго времени суток!
Вот столкнулся с проблемой, которую не знаю как решить. Есть у меня в одной библиотеке два ActiveX. Оба имеют разные интерфейсы. Интерфейс первого таков (например)
Интерфейс второго:
так как у них есть идентичные методы решил IDrow2 унаследовать от IDrow:
как можете заметить id = 3. Когда я пытаюсь сделать id = 1, получаю ошибку midl\oleaut32.dll : error MIDL2020 : error generating type library : LayOut failed : ISpView2 Вопрос: как правильно унаследовать интерфейс, чтоб id нумерировать начиная с 1 |
||||||
|
|||||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
||||
|
||||
| RastaDja |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 1.11.2010 Репутация: 1 Всего: 5 |
то есть
это так должно быть, и это правильно? -------------------- The more closely you look at one thing, the less closely can you see something else. |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Да. Все ID (включая и те, что в базовом интерфейсе) должны быть уникальными
|
|||
|
||||
| RastaDja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 1.11.2010 Репутация: 1 Всего: 5 |
тогда спасибо, вопросов больше нет!
Добавлено через 5 минут и 10 секунд ОЙ. Поспешил с закрытием темы. Ещё 1 вопрос. Почему тогда при наследовании от IDispatch или IUnknown id начинаются с 0 а не с 6 или 4 соответственно? -------------------- The more closely you look at one thing, the less closely can you see something else. |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Методы самого IDispatch (или IUnknown) не могут быть вызваны через интерфейс диспетчеризации (IDispatch::Invoke). А ID собственно для него (IDispatch::Invoke) и сделаны. Добавлено через 1 минуту и 53 секунды Если вы посмотрите на С++ хидер после midl, то в интерфейсе disp (но не dual!) вы своих описанных методов вообще не найдете |
|||
|
||||
| RastaDja |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 1.11.2010 Репутация: 1 Всего: 5 |
тоесть
и
по сути одно и тоже, и не нисёт никакой информации о том что IDrow2 унаследован от IDrow? Добавлено через 43 секунды тоесть
и
по сути одно и тоже, и не нисёт никакой информации о том что IDrow2 унаследован от IDrow? -------------------- The more closely you look at one thing, the less closely can you see something else. |
||||||||
|
|||||||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Не совсем одно и тоже - в 2м случае QueryInterface от IDrow2 на UUID_IDrow вернет IDraw (по сути IDispatch), а в 1м случае не вернет.
А по набору методов (Native) они одинаковы |
|||
|
||||
| RastaDja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 337 Регистрация: 1.11.2010 Репутация: 1 Всего: 5 |
Ну вот и все. Думаю разобрался.
спс -------------------- The more closely you look at one thing, the less closely can you see something else. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |