Совместимость DotNet и COM


Среда DotNet обеспечивает взаимную поддержку для смешенного кода DotNet и обычного кода Win32, включая COM.

Способы обеспечения совместимости:
1. При разработки приложений Net можно использовать объекты COM за счет включения в специальную оболочку RCW (Runtime Callable Wrapper).

Заключается объект в RCW и работает. Идея: к примеру, обычная .bmp картинка заключается в оболочку. Размер увеличится, но теперь она станет редактируемой и её можно передавать.
Примечание лектора: есть аналог в базах данных. Работа СУБД Oracle с базами данных других СУБД.

2. Использование функций экспортируемых из библиотек dll обычного Win32 при помощи специального вызова Platform Invocation Service или PInvoc. Для того чтобы вызывать обычные функции из экспортируемых библиотек dll есть специальный механизм.

3. При разработки приложений Win32 можно использовать объекты ДН как будто это обычные объекты COM с помощью специальной оболочки CCW(COM Callable Wrapper).

4. Использование функций, предоставляемых Net при помощи инверсной технологии PInvoc, для того чтобы там с ними работать, т.е. InversePInvoc. Т.е. можно из Win32 вызвать готовые функции, написанные в ДН, но только с помощью этой функции.

Проблемы
Фактически проблемы взаимны. На границах управляемого и неуправляемого кода возникают основные проблемы.
• В неуправляемом коде могут быть ссылки, указатели,
• Маршалинг. На границе нужен специальный маршализатор совместимости. Но он есть готовый InterlopeMarshaling , поэтому тут всё более или менее решено.

Поддержка COM Interlope или COM Interlope Marshaling
Для COMInterlope по-разному используется механизм подсчёта ссылок. В СОМ технологии каждый объект имеет свой механизм подсчёта ссылок, а в DotNet для этого используется сборщик мусора (один для всех).


Комментарии запрещены.




Статистика