Заменить родной C ++ COM .dll на .NET COM .dll - PullRequest
1 голос
/ 31 марта 2011

У нашего клиента есть старые Win32-клиенты, которые используют собственный C ++ COM-файл, зарегистрированный нами, который мы предоставляем.

Мы хотим заменить нативный .dll версией .NET. Итак, мы создали .NET DLL и COM зарегистрировали его. У нас есть собственные тестовые клиенты C ++, которые могут обрабатывать переход от старого .dll к новому, но ... кажется, нам нужно перекомпилировать их, чтобы он работал.

Есть ли логическая причина, по которой нам нужно перекомпилировать тестовый клиент, или мы делаем что-то не так?

Мы не можем требовать от наших клиентов перекомпилировать своих клиентов.

1 Ответ

7 голосов
/ 31 марта 2011

Возможно, вы забыли использовать атрибут [Guid] в интерфейсе и объявлениях классов.Они должны соответствовать IID и CLSID, которые использовались в IDL для старого проекта C ++.Или функции уже не в том же порядке.Или же они не имеют одинаковый DISPID, если клиентский код использует их с поздним связыванием.

Лучший способ избежать этого - добавить ссылку на старую библиотеку типов в ваш проект .NET, чтобы вы могли использовать старые интерфейсы в своем коде.Вам все еще нужно получить [Guid] класса, который правильно реализует интерфейсы, поэтому он имеет правильный CLSID.

Вы можете использовать инструмент OleView.exe, View + Type Library для сравнения старого и новогобиблиотека типов.Скопируйте / вставьте сгенерированный IDL и измените его.Вы получаете новую библиотеку типов из Regasm.exe / tlb.Любое несоответствие может (и вероятно будет) быть проблемой.

...