2013-02-11 2 views
0

У меня есть сборка, которая предоставляет интерфейс и класс COM через ComVisible. Этот класс используется приложением VB6.Могу ли я перемещать классы COM между сборками?

Теперь, из-за некоторой реорганизации, я хочу, чтобы этот класс предоставлялся другой сборкой. До тех пор, пока я сохраняю Guid и ProgID, могу ли я переместить код в эту новую сборку, зарегистрировать его и найти приложение VB6, не перекомпилируя его?

ответ

1

Пока я держу Guid и ProgID

Будьте осторожны, есть Guids, множественное число. Как минимум, у вас есть один тип интерфейса, IID и один для класса, который реализует интерфейс, CLSID. Дополнительные, если вы поддерживаете события или имеете более одного интерфейса или класса в сборке. Если вы также зарегистрируете библиотеку типов (параметр Regasm.exe/tlb), вы также получите руководство для самой сборки, которая используется для TLBID библиотеки типов.

Получите любую из этих ошибок или положите их на автоматическое создание .NET, и замена не будет работать.

Лучший способ гарантировать идентичность замены - декомпилировать библиотеки типов и сравнить их для идентификации. В командной строке Visual Studio сначала создайте библиотеку типов, если у вас ее еще нет с Tlbexp.exe. Затем запустите Oleview.exe, File + View Typelib, чтобы получить содержимое библиотеки типов, декомпилированную в IDL. Скопируйте/вставьте содержимое правой панели в текстовый файл. Повторите для замены DLL и сравните. Не беспокойтесь о различиях в комментариях.

+0

Благодарим вас за головы, которые я пропустил, и намек на использование OleView. Я успешно развернул новую сборку с классами COM и могу подтвердить, что она работает. –

1

Да, я не понимаю, почему нет ... Просто убедитесь, что старая сборка должным образом незарегистрирована.

Смежные вопросы