![]() |
|
|
![]()
|
|
| Argentum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 20.11.2007 Репутация: нет Всего: нет |
Добрый день. возникла проблема. Когда-то был COM (c ActiveX) с использованием ATL, на основе него был сделан другой ком без замены гуидов. В итоге сейчас два кома конфликтуют, т.е. перекрывают друг-друга. Как я понимаю, нужно заменить гуиды. Подскажите какие именно и где их менять, какие есть особенности этой процедуры. И как я понимаю, два кома с одинаковыми именами существовать на одной машине могут, поэтому с именем самого кома ничего мудрить не нужно...
П.С. Просто я все позаменял, вроде регистрируется в системе, но он глючит даже при добавлении его на форму в VS 2008 (.net). |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 5 Всего: 118 |
прочтите сначала матчасть в книге "Основы COM" Дейл Роджерсон автор, там думаю поймете где что менять, а мы врядли поймем, т.к. фраза "Когда-то был COM (c ActiveX) с использованием ATL" то примерно как "Я создал форму на C# с использованием WinAPI она работает а еще умеет программа читать файлы"... я к тому что ATL можно использовать и вне COM.... Либо постарайтесь более подробно описать структуру классов вашего проекта и структуру файлов, т.к. создать COM компонент можно разными "способами".
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
|
|||
|
||||
| Argentum |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 20.11.2007 Репутация: нет Всего: нет |
Что я не так сказал? ActiveX это по сути тот же COM , просто с некоторыми дополнениями и все. Не говорю, что я гуру, но представление имею достаточное. Проблема в том, что я не все тонкости COM ’а знаю. И заменив все гуиды, увидел, что все равно в дотнете один ком заменяется другим. Возможно нужно менять ProgID... Вот это я и спрашиваю...
И? Если я пишу про COM! Зачем лишние слова?
Я вроде написал - ATL. Или что-то другое интересует? Вы меня простите, но такое ощущение, что Вы просто хотите по фраериться. А по топику. Могу чуть более разжевать: Был COM (точнее это ActiveX), взяли исходники этого ActiveX ничего не меняли, кроме поведения функций (и может добавления пары функций и интерфейсов) и сделали еще один новый ActiveX. В итоге вышло два ActiveX, которые ведут себя по разному, но естественно на машине видны как один. Т.е. при регистрации этих ActiveX они заменяют друг-друга. Мой вопрос в том, что нужно поменять в одном из ActiveX’ов, чтобы в дотнете с помощью ToolBox (именно в нем, а не в ручную в с++ по гуиду) можно было добавить эти два ActiveX одновременно (почему я это уточняю? так как в VB была подобная проблема). При создании ActiveX использовался ATL. Надеюсь теперь все понятно. |
||||||
|
|||||||
| Argentum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 20.11.2007 Репутация: нет Всего: нет |
Хм, я так не сделал. Чем это чревато? По идее же не чем серьезным, в основном только мусором в реестре? Или я чего-то не понимаю? |
|||
|
||||
| Argentum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 20.11.2007 Репутация: нет Всего: нет |
Всем спасибо за внимание, на самом деле все оказалось проще. Есть макрос, который принимает набор констант и формирует из них гуид, который и является основополагающим. Т.е. именованно он и идентифицирует этот ActiveX в системе.
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Поэтому лучше удалить оба, что бы гарантировать отсуствие мусора Добавлено через 4 минуты и 25 секунд Не только он. У компонента с TLB будет от 3 штук разных GUID'ов: по 1 штуке на каждый интерфейс, по 1 штуке на каждый CLSID, и 1 штука на TypeLib. Смотри в *.idl файле и в *.rgs файлах |
|||
|
||||
| Argentum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 20.11.2007 Репутация: нет Всего: нет |
Да, про *.idl файлы и *.rgs я знаю. Первым делом там и поменял.
Ясно. Ну хоть что-то успокаивает, они оба регистрируют TLB )) |
|||
|
||||
| Argentum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 20.11.2007 Репутация: нет Всего: нет |
Продолжение проблемы. Все регистрируется, система видит как два разных кома, но после того как я добавил этот активикс в ToolBox и пытаюсь перетащить на форму выскакивает: "Failed to import the ActiveX control. Please ensure it is properly registerd".
Попробовал с помощью утилитки AxImp. Пишет: AxImp Error: Did not find a registered ActiveX control in 'E:\armgo\deps\TMReports\TMReports.ocx'., т.е. как я понял он не видит моего ActiveX. Т.е. я что-то не доделал или может, что-то лишнее задел. Может у кого есть идеи? |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
||||
|
||||
| Argentum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 20.11.2007 Репутация: нет Всего: нет |
По поводу второго вопроса, то вряд ли, так как я делал все через Replace All и менял по всему солюшену. А вот по поводу первого вопроса, мог пропустить еще какие-то макросы... попробую покопаться. |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
||||
|
||||
| Argentum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 20.11.2007 Репутация: нет Всего: нет |
пишу с большой задержкой. Все уже давно решено. И действительно, проблемы была в том, что не был зарегистрирован TypeLib из-за того, что он был представлен макросом, который я упустил из виду при полной замене (Replace All). Т.е. просто этот макрос не подхавтило при замене.
|
|||
|
||||
![]()
|
| 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. |