Как использовать сборку в unmanaged C++
От: hamolabs Армения  
Дата: 08.01.04 14:00
Оценка:
Привет всем.

У меня DLL на C#. Хoчу использовать его в COM компонета на C++.

08.01.04 17:18: Перенесено модератором из 'C/C++' — ПК
Re: Как использовать сборку в unmanaged C++
От: TK Лес кывт.рф
Дата: 08.01.04 14:10
Оценка:
Здравствуйте, hamolabs, Вы писали:

H>У меня DLL на C#. Хoчу использовать его в COM компонета на C++.


1. Оформить классы из c# DLL как COM объекты.
2. Создать свой runtime host и грузить dll в него.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: Как использовать сборку в unmanaged C++
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 09.01.04 03:52
Оценка:
Здравствуйте, hamolabs, Вы писали:

H>У меня DLL на C#. Хoчу использовать его в COM компонета на C++.


http://www.rsdn.ru/article/dotnet/net2com.xml
Автор(ы): Алексей Дубовцев
Дата: 19.11.2001
Re[2]: Как использовать сборку в unmanaged C++
От: hamolabs Армения  
Дата: 09.01.04 08:52
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

Дело в том что managed dll готовая сборка и неорганизована как COM.
Re[3]: Как использовать сборку в unmanaged C++
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 09.01.04 08:56
Оценка:
Здравствуйте, hamolabs, Вы писали:

H>Дело в том что managed dll готовая сборка и неорганизована как COM.


цитата из статьи:

Итак, у нас есть сборка, которая несет в себе полную информацию о типах, в чем мы уже убедились при помощи ildasm. Но эти типы понятны только для среды исполнения .NET и не несут никакой полезной информации для COM. Чтобы COM смогла использовать типы, описанные в сборке, мы с вами создадим и зарегистрируем библиотеку типов COM (tlb). Исполнить этот замысел нам поможет утилита regasm, которая как раз для этого и предназначена. Создавать библиотеку будем так:

regasm /tlb Имя_вашей_борки.dll

После выполнения данной команды утилита regasm создаст библиотеку типов COM из вашей сборки и автоматически зарегистрирует её в системном реестре.

Re[4]: Как использовать сборку в unmanaged C++
От: AlexZu Россия  
Дата: 09.01.04 10:01
Оценка:
Здравствуйте, 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.
Re[5]: Как использовать сборку в unmanaged C++
От: hamolabs Армения  
Дата: 09.01.04 11:51
Оценка:
Здравствуйте, 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 генерируеться
struct __declspec(uuid("706b3cd6-7858-3044-935a-057fae5d35ca"))
/* dual interface */ _ZipFile;

это как я понимю прокси но с чем его едят ???
Re[6]: Как использовать сборку в unmanaged C++
От: hamolabs Армения  
Дата: 09.01.04 13:18
Оценка:
Здравствуйте.

Вот такая ситуация.

У меня есть open source code которое реализует архивация файлов (zip, gzip, bzip2, tar). Это можно скачать здесь.

Хочу использовать ето в unmanaged C++ для создания COM компонента которое будет подключен как Custom Task к DTS MS SQL Server.

Когда создаю COM на C#, вроде все в поряке, но когда хочу регистрировать task, вылезает ошибка "ненахожу входную точку для DllRegisterServer".
Re[5]: Как использовать сборку в unmanaged C++
От: mihailik Украина  
Дата: 09.01.04 16:39
Оценка:
AZ>Хотелось бы добавить, что это будет работать только в том случае, если разработчики сборки не скрыли типы находящиеся в ней от COM с помощью ComVisibleAttribute.

Возможны и другие подводные камни. Например, при изменении этой сборки (например, на новую версию), может "поехать" GUID. Могут поехать интерфейсы (COM интерфейсы чувствительны к порядку методов, а дотнетовские нечувствительны).

Также есть проблемы с неподписанными сборками.

Впрочем, всё это решаемо, в том числе и ComVisibleAttribute.
... << RSDN@Home 1.1.0 stable >>
Re[7]: Как использовать сборку в unmanaged C++
От: mihailik Украина  
Дата: 09.01.04 16:57
Оценка:
H>Когда создаю COM на C#, вроде все в поряке, но когда хочу регистрировать task, вылезает ошибка "ненахожу входную точку для DllRegisterServer".

А там нельзя регистрировать не DLL, а что-нибудь другое? TLB, например.
... << RSDN@Home 1.1.0 stable >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.