Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Замена гуидов 
:(
    Опции темы
Argentum
Дата 19.5.2010, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 20.11.2007

Репутация: нет
Всего: нет



Добрый день. возникла проблема. Когда-то был COM (c ActiveX) с использованием ATL, на основе него был сделан другой ком без замены гуидов. В итоге сейчас два кома конфликтуют, т.е. перекрывают друг-друга. Как я понимаю, нужно заменить гуиды. Подскажите какие именно и где их менять, какие есть особенности этой процедуры. И как я понимаю, два кома с одинаковыми именами существовать на одной машине могут, поэтому с именем самого кома ничего мудрить не нужно...
П.С. Просто я все позаменял, вроде регистрируется в системе, но он глючит даже при добавлении его на форму в VS 2008 (.net).
PM MAIL   Вверх
jonie
Дата 20.5.2010, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



прочтите сначала матчасть в книге "Основы COM" Дейл Роджерсон автор, там думаю поймете где что менять, а мы врядли поймем, т.к. фраза "Когда-то был COM (c ActiveX) с использованием ATL" то примерно как "Я создал форму на C# с использованием WinAPI она работает а еще умеет программа читать файлы"... я к тому что ATL можно использовать и вне COM.... Либо постарайтесь более подробно описать структуру классов вашего проекта и структуру файлов, т.к. создать COM компонент можно разными "способами".


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
xvr
Дата 20.5.2010, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



  • На той машине, где вас угораздило установить 2 COM'а с одинаковыми GUID'ами удалить ОБА COM'а (regsvr32 /s /u <filename.dll>) (Удалять ДО модификации GUID'ов!)
  • Во всех исходниках (включая *.reg) поменять ОДИНАКОВЫЕ GUID'ы на другие ОДИНАКОВЫЕ. Пересобрать все (Rebuild с нуля).
  • Заново зарегистрировать ОБА COM'а

PM MAIL   Вверх
Argentum
Дата 20.5.2010, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 20.11.2007

Репутация: нет
Всего: нет



Цитата(jonie @ 20.5.2010,  00:22)
прочтите сначала матчасть в книге "Основы COM" Дейл Роджерсон автор, там думаю поймете где что менять, а мы врядли поймем, т.к. фраза "Когда-то был COM (c ActiveX) с использованием ATL" то примерно как "Я создал форму на C# с использованием WinAPI она работает а еще умеет программа читать файлы"... я к тому что ATL можно использовать и вне COM.... Либо постарайтесь более подробно описать структуру классов вашего проекта и структуру файлов, т.к. создать COM компонент можно разными "способами".


Что я не так сказал? ActiveX это по сути тот же COM , просто с некоторыми дополнениями и все. Не говорю, что я гуру, но представление имею достаточное. Проблема в том, что я не все тонкости COM ’а знаю. И заменив все гуиды, увидел, что все равно в дотнете один ком заменяется другим. Возможно нужно менять ProgID... Вот это я и спрашиваю... 
Цитата

я к тому что ATL можно использовать и вне COM

И? Если я пишу про COM!
Зачем лишние слова?
Цитата

т.к. создать COM компонент можно разными "способами"

Я вроде написал - ATL. Или что-то другое интересует?
Вы меня простите, но такое ощущение, что Вы просто хотите по фраериться.

А по топику. Могу чуть более разжевать:
Был COM (точнее это ActiveX), взяли исходники этого ActiveX ничего не меняли, кроме поведения функций (и может добавления пары функций и интерфейсов) и сделали еще один новый ActiveX. В итоге вышло два ActiveX, которые ведут себя по разному, но естественно на машине видны как один. Т.е. при регистрации этих ActiveX они заменяют друг-друга. Мой вопрос в том, что нужно поменять в одном из ActiveX’ов, чтобы в дотнете с помощью ToolBox (именно в нем, а не в ручную в с++ по гуиду) можно было добавить эти два ActiveX одновременно (почему я это уточняю? так как в VB была подобная проблема). 
При создании ActiveX использовался ATL.
Надеюсь теперь все понятно.
PM MAIL   Вверх
Argentum
Дата 20.5.2010, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 20.11.2007

Репутация: нет
Всего: нет



Цитата(xvr @  20.5.2010,  12:17 Найти цитируемый пост)
На той машине, где вас угораздило установить 2 COM'а с одинаковыми GUID'ами удалить ОБА COM'а (regsvr32 /s /u <filename.dll>) (Удалять ДО модификации GUID'ов!)

Хм, я так не сделал. Чем это чревато? По идее же не чем серьезным, в основном только мусором в реестре? Или я чего-то не понимаю?
PM MAIL   Вверх
Argentum
Дата 20.5.2010, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 20.11.2007

Репутация: нет
Всего: нет



Всем спасибо за внимание, на самом деле все оказалось проще. Есть макрос, который принимает набор констант и формирует из них гуид, который и является основополагающим. Т.е. именованно он и идентифицирует этот ActiveX в системе.
PM MAIL   Вверх
xvr
Дата 20.5.2010, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(Argentum @  20.5.2010,  14:46 Найти цитируемый пост)
Хм, я так не сделал. Чем это чревато? По идее же не чем серьезным, в основном только мусором в реестре?
Этот мусор может серьезно усложнить жизнь COM подсистеме. Если эти 2 COM'а регистрировали разный набор данных (например один регистрировал TLB, а второй нет), то оставшийся от первого COM'а мусор в реестре может подхватить 2й COM.
Поэтому лучше удалить оба, что бы гарантировать отсуствие мусора

Добавлено через 4 минуты и 25 секунд
Цитата(Argentum @  20.5.2010,  17:41 Найти цитируемый пост)
Есть макрос, который принимает набор констант и формирует из них гуид, который и является основополагающим. Т.е. именованно он и идентифицирует этот ActiveX в системе. 
Не только он. У компонента с TLB будет от 3 штук разных GUID'ов: по 1 штуке на каждый интерфейс, по 1 штуке на каждый CLSID, и 1 штука на TypeLib. Смотри в *.idl файле и в *.rgs файлах



PM MAIL   Вверх
Argentum
Дата 21.5.2010, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 20.11.2007

Репутация: нет
Всего: нет



Цитата(xvr @ 20.5.2010,  18:53)
Цитата(Argentum @  20.5.2010,  14:46 Найти цитируемый пост)
Хм, я так не сделал. Чем это чревато? По идее же не чем серьезным, в основном только мусором в реестре?
Этот мусор может серьезно усложнить жизнь COM подсистеме. Если эти 2 COM'а регистрировали разный набор данных (например один регистрировал TLB, а второй нет), то оставшийся от первого COM'а мусор в реестре может подхватить 2й COM.
Поэтому лучше удалить оба, что бы гарантировать отсуствие мусора

Добавлено @ 18:57
Цитата(Argentum @  20.5.2010,  17:41 Найти цитируемый пост)
Есть макрос, который принимает набор констант и формирует из них гуид, который и является основополагающим. Т.е. именованно он и идентифицирует этот ActiveX в системе. 
Не только он. У компонента с TLB будет от 3 штук разных GUID'ов: по 1 штуке на каждый интерфейс, по 1 штуке на каждый CLSID, и 1 штука на TypeLib. Смотри в *.idl файле и в *.rgs файлах

Да, про *.idl файлы и *.rgs я знаю. Первым делом там и поменял.

Цитата

Этот мусор может серьезно усложнить жизнь COM подсистеме. Если эти 2 COM'а регистрировали разный набор данных (например один регистрировал TLB, а второй нет), то оставшийся от первого COM'а мусор в реестре может подхватить 2й COM.
Поэтому лучше удалить оба, что бы гарантировать отсуствие мусора

Ясно. Ну хоть что-то успокаивает, они оба регистрируют TLB ))
PM MAIL   Вверх
Argentum
Дата 21.5.2010, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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. Т.е. я что-то не доделал или может, что-то лишнее задел. Может у кого есть идеи?
PM MAIL   Вверх
xvr
Дата 21.5.2010, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(Argentum @  21.5.2010,  11:49 Найти цитируемый пост)
Может у кого есть идеи? 
GUID'ы точно все поменял? Когда менял случайно не нагенерил разных GUID'ов там, где изначально они были одинаковыми?


PM MAIL   Вверх
Argentum
Дата 21.5.2010, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 20.11.2007

Репутация: нет
Всего: нет



Цитата(xvr @  21.5.2010,  12:28 Найти цитируемый пост)
GUID'ы точно все поменял? Когда менял случайно не нагенерил разных GUID'ов там, где изначально они были одинаковыми?

По поводу второго вопроса, то вряд ли, так как я делал все через Replace All и менял по всему солюшену. А вот по поводу первого вопроса, мог пропустить еще какие-то макросы... попробую покопаться.
PM MAIL   Вверх
xvr
Дата 21.5.2010, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(Argentum @  21.5.2010,  11:49 Найти цитируемый пост)
пытаюсь перетащить на форму выскакивает: "Failed to import the ActiveX control. Please ensure it is properly registerd". 
Рискну предположить что не был зарегистрирован TypeLib (см в *.reg файлах параметр 'TypeLib')


PM MAIL   Вверх
Argentum
Дата 31.5.2010, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 20.11.2007

Репутация: нет
Всего: нет



пишу с большой задержкой. Все уже давно решено. И действительно, проблемы была в том, что не был зарегистрирован TypeLib из-за того, что он был представлен макросом, который я упустил из виду при полной замене (Replace All). Т.е. просто этот макрос не подхавтило при замене.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0538 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.