"динамический" тип возврата присутствует при использовании TLBIMP для генерации сборки взаимодействия
У меня есть элемент управления COM, который имеет класс MyCOMCtl, имеющий свойство Data, которое доступно как get_Data в сгенерированной сборке COM Interop. Для этого элемента управления COM создаются две разные сборки взаимодействия:
- При добавлении элемента управления COM в VS2010 автоматически создается взаимодействие (и Ax...).
- Использование TLBIMP v4 Tool из командной строки VS2010.
Проблема в том, что когда сборка взаимодействия генерируется с использованием TLBIMP, тогда get_Data становится:
dynamic MyCOMCtl::get_Data(...)
но когда его автоматически генерирует VS2010, тогда он становится:
object MyCOMCtl::get_Data(...)
Моему коду нужен второй, который возвращает объект. Проект VS2010 предназначен для клиентского профиля.NET Framwork 4, а версия TLBIMP - 4.0.30319.1.
Почему это происходит? Есть ли способ исправить это?
1 ответ
Я полагаю, вы все перепутали. tlbimp
не должен создавать динамические типы по причинам обратной совместимости.
Однако Visual Studio генерирует динамические типы при использовании NoPIA. NoPIA означает, что вам не нужно отправлять основную сборку взаимодействия вместе с вашим контролем. Также типы не генерируются tlbimp
больше Вместо этого они создаются непосредственно в сборке, которая импортирует библиотеку типов. Вы можете (и imho должен) отключить этот параметр, щелкнув правой кнопкой мыши ссылку COM в Visual Studio, выбрав меню "Свойства" и установив для свойства "Встроить типы взаимодействия" значение false. Вы увидите, что сгенерированная ссылка Visual Studio также создает object
тип возврата.
Однако это еще не совсем правильно. Если вы создаете (первичную) библиотеку взаимодействия для своего элемента управления с помощью tlbimp, вам также следует обратиться к ней! Не добавляйте COM-ссылку в ваш проект. Вместо этого найдите созданную tlbimp библиотеку взаимодействия и добавьте эту.