Здравствуйте, hamolabs, Вы писали:
H>Дело в том что managed dll готовая сборка и неорганизована как COM.
цитата из статьи:
Итак, у нас есть сборка, которая несет в себе полную информацию о типах, в чем мы уже убедились при помощи ildasm. Но эти типы понятны только для среды исполнения .NET и не несут никакой полезной информации для COM. Чтобы COM смогла использовать типы, описанные в сборке, мы с вами создадим и зарегистрируем библиотеку типов COM (tlb). Исполнить этот замысел нам поможет утилита regasm, которая как раз для этого и предназначена. Создавать библиотеку будем так:
regasm /tlb Имя_вашей_борки.dll
После выполнения данной команды утилита regasm создаст библиотеку типов COM из вашей сборки и автоматически зарегистрирует её в системном реестре.
Здравствуйте, Odi$$ey, Вы писали:
OE>Здравствуйте, hamolabs, Вы писали:
H>>Дело в том что managed dll готовая сборка и неорганизована как COM.
OE>цитата из статьи:
OE>
OE>Итак, у нас есть сборка, которая несет в себе полную информацию о типах, в чем мы уже убедились при помощи ildasm. Но эти типы понятны только для среды исполнения .NET и не несут никакой полезной информации для COM. Чтобы COM смогла использовать типы, описанные в сборке, мы с вами создадим и зарегистрируем библиотеку типов COM (tlb). Исполнить этот замысел нам поможет утилита regasm, которая как раз для этого и предназначена. Создавать библиотеку будем так:
OE>regasm /tlb Имя_вашей_борки.dll
OE>После выполнения данной команды утилита regasm создаст библиотеку типов COM из вашей сборки и автоматически зарегистрирует её в системном реестре.
Хотелось бы добавить, что это будет работать только в том случае, если разработчики сборки не скрыли типы находящиеся в ней от COM с помощью ComVisibleAttribute.
Здравствуйте, AlexZu, Вы писали:
AZ>Здравствуйте, Odi$$ey, Вы писали:
OE>>Здравствуйте, hamolabs, Вы писали:
H>>>Дело в том что managed dll готовая сборка и неорганизована как COM.
OE>>цитата из статьи:
OE>>
OE>>Итак, у нас есть сборка, которая несет в себе полную информацию о типах, в чем мы уже убедились при помощи ildasm. Но эти типы понятны только для среды исполнения .NET и не несут никакой полезной информации для COM. Чтобы COM смогла использовать типы, описанные в сборке, мы с вами создадим и зарегистрируем библиотеку типов COM (tlb). Исполнить этот замысел нам поможет утилита regasm, которая как раз для этого и предназначена. Создавать библиотеку будем так:
OE>>regasm /tlb Имя_вашей_борки.dll
OE>>После выполнения данной команды утилита regasm создаст библиотеку типов COM из вашей сборки и автоматически зарегистрирует её в системном реестре.
AZ>Хотелось бы добавить, что это будет работать только в том случае, если разработчики сборки не скрыли типы находящиеся в ней от COM с помощью ComVisibleAttribute.
Спосибо за ответы. Все это понятно, но некоторые классы регистрируються а некоторые — нет. Но когда в C++ делаю импорт tlb созданный regasm — ом, в файле tlh генерируеться
AZ>Хотелось бы добавить, что это будет работать только в том случае, если разработчики сборки не скрыли типы находящиеся в ней от COM с помощью ComVisibleAttribute.
Возможны и другие подводные камни. Например, при изменении этой сборки (например, на новую версию), может "поехать" GUID. Могут поехать интерфейсы (COM интерфейсы чувствительны к порядку методов, а дотнетовские нечувствительны).
Также есть проблемы с неподписанными сборками.
Впрочем, всё это решаемо, в том числе и ComVisibleAttribute.