2013-02-15 5 views
0

У меня есть элемент управления ActiveX COM и его исходный код. Я хотел изменить один из входных параметров метода, поэтому я изменил IDL и т. Д., И создал COM DLL и TLB.Различные результаты от TLBIMP и AXIMP

Но когда я импортировал COM-DLL в .NET-проект, метод сохранил свою старую подпись. Поэтому я попытался создать ActiveX DLL с помощью AXIMP (хотя это все равно, я хотел попробовать).

Тем не менее подпись метода не изменилась на то, к чему я изменился.

Но когда я сгенерировал межобъектную DLL, используя TLBIMP из созданного файла TLB, сигнатура метода изменилась правильно.

Где я могу быть неправ?

Спасибо.

+0

Вы уже зарегистрированы в библиотеке, используя 'regsvr32', перед импортом? – Carsten

ответ

1

Существует много ручных шагов, поэтому легко пропустить один. Это скорее зависит от того, как вы импортировали библиотеку типов, есть несколько способов сделать это. Если вы выбрали ссылку на вкладке «Добавить ссылку + COM», то вероятной ошибкой является то, что вы забыли перерегистрировать новый COM-сервер. Или вы случайно выбрали старый, а не новый, что может произойти, когда вы меняете указатели, как и следовало ожидать, и забываете очистить старый. Очистка довольно важна и легко пропущена, так как это необходимо сделать, прежде чем восстанавливать COM-сервер. В реестре может быть много мусора.

И да, использование Tlbimp.exe напрямую - это самый надежный способ избежать несчастных случаев. Поскольку вы запускаете его непосредственно в библиотеке типов и вообще не используете реестр.

Рецепт, имеющий наименьшее возможное количество проблем может выглядеть следующим образом:

  1. Разрегистрируйте старый COM сервер первым запуском regsvr.exe -u
  2. Удалите старую DLL и TLB файлы
  3. Измените IDL, чтобы добавить свой новый метод
  4. назначить новый IID для интерфейса вы изменили
  5. Назначить новый CLSID для компонентного класса, который использует интерфейс
  6. Increment библиотека версия
  7. Измените имя выходного DLL, льгота в том числе основной + младшую версию в названии
  8. Построить новый COM-сервер
  9. зарегистрировать сервер с RegSvr32.exe
  10. Run TLBIMP .exe для создания библиотеки
  11. Interop Удалите ссылку на старую библиотеку в вашем-взаимодействия .NET проекта
  12. Использование Добавить ссылку + Обзор, чтобы добавить новую библиотеку Interop

Пропуск любого из этих шагов может вызвать проблемы с созданием проблемы, загрязнение реестра, DLL Hell и иметь многочасовой паршивый разрушенный день без каких-либо действий.

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