| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: COM/DCOM/ActiveX/ATL/CORBA > Замена гуидов |
| Автор: Argentum 19.5.2010, 15:06 |
| Добрый день. возникла проблема. Когда-то был COM (c ActiveX) с использованием ATL, на основе него был сделан другой ком без замены гуидов. В итоге сейчас два кома конфликтуют, т.е. перекрывают друг-друга. Как я понимаю, нужно заменить гуиды. Подскажите какие именно и где их менять, какие есть особенности этой процедуры. И как я понимаю, два кома с одинаковыми именами существовать на одной машине могут, поэтому с именем самого кома ничего мудрить не нужно... П.С. Просто я все позаменял, вроде регистрируется в системе, но он глючит даже при добавлении его на форму в VS 2008 (.net). |
| Автор: jonie 20.5.2010, 00:22 |
| прочтите сначала матчасть в книге "Основы COM" Дейл Роджерсон автор, там думаю поймете где что менять, а мы врядли поймем, т.к. фраза "Когда-то был COM (c ActiveX) с использованием ATL" то примерно как "Я создал форму на C# с использованием WinAPI она работает а еще умеет программа читать файлы"... я к тому что ATL можно использовать и вне COM.... Либо постарайтесь более подробно описать структуру классов вашего проекта и структуру файлов, т.к. создать COM компонент можно разными "способами". |
| Автор: xvr 20.5.2010, 12:17 |
|
| Автор: Argentum 20.5.2010, 13:54 | ||||||
Что я не так сказал? ActiveX это по сути тот же COM , просто с некоторыми дополнениями и все. Не говорю, что я гуру, но представление имею достаточное. Проблема в том, что я не все тонкости COM ’а знаю. И заменив все гуиды, увидел, что все равно в дотнете один ком заменяется другим. Возможно нужно менять ProgID... Вот это я и спрашиваю...
И? Если я пишу про COM! Зачем лишние слова?
Я вроде написал - ATL. Или что-то другое интересует? Вы меня простите, но такое ощущение, что Вы просто хотите по фраериться. А по топику. Могу чуть более разжевать: Был COM (точнее это ActiveX), взяли исходники этого ActiveX ничего не меняли, кроме поведения функций (и может добавления пары функций и интерфейсов) и сделали еще один новый ActiveX. В итоге вышло два ActiveX, которые ведут себя по разному, но естественно на машине видны как один. Т.е. при регистрации этих ActiveX они заменяют друг-друга. Мой вопрос в том, что нужно поменять в одном из ActiveX’ов, чтобы в дотнете с помощью ToolBox (именно в нем, а не в ручную в с++ по гуиду) можно было добавить эти два ActiveX одновременно (почему я это уточняю? так как в VB была подобная проблема). При создании ActiveX использовался ATL. Надеюсь теперь все понятно. |
| Автор: Argentum 20.5.2010, 17:41 |
| Всем спасибо за внимание, на самом деле все оказалось проще. Есть макрос, который принимает набор констант и формирует из них гуид, который и является основополагающим. Т.е. именованно он и идентифицирует этот ActiveX в системе. |
| Автор: xvr 20.5.2010, 18:53 | ||||
Поэтому лучше удалить оба, что бы гарантировать отсуствие мусора Добавлено через 4 минуты и 25 секунд
|
| Автор: Argentum 21.5.2010, 10:06 | ||||||
Да, про *.idl файлы и *.rgs я знаю. Первым делом там и поменял.
Ясно. Ну хоть что-то успокаивает, они оба регистрируют TLB )) |
| Автор: Argentum 21.5.2010, 11:49 |
| Продолжение проблемы. Все регистрируется, система видит как два разных кома, но после того как я добавил этот активикс в 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 21.5.2010, 12:28 |
| GUID'ы точно все поменял? Когда менял случайно не нагенерил разных GUID'ов там, где изначально они были одинаковыми? |
| Автор: Argentum 21.5.2010, 13:44 | ||
По поводу второго вопроса, то вряд ли, так как я делал все через Replace All и менял по всему солюшену. А вот по поводу первого вопроса, мог пропустить еще какие-то макросы... попробую покопаться. |
| Автор: xvr 21.5.2010, 18:03 | ||
|
| Автор: Argentum 31.5.2010, 15:59 |
| пишу с большой задержкой. Все уже давно решено. И действительно, проблемы была в том, что не был зарегистрирован TypeLib из-за того, что он был представлен макросом, который я упустил из виду при полной замене (Replace All). Т.е. просто этот макрос не подхавтило при замене. |