Вызываемая оболочка времени выполнения
Обновлен: Ноябрь 2007
Среда CLR предоставляет доступ к COM-объектам через посредник, называемый вызываемой оболочкой времени выполнения. Хотя вызываемая оболочка времени выполнения выглядит для клиентов .NET обычным объектом, ее основная функция состоит в маршалинге вызовов между клиентом .NET и COM-объектом.
Среда выполнения создает по одной вызываемой оболочке времени выполнения для каждого COM-объекта, независимо от числа существующих ссылок на этот объект. Среда выполнения поддерживает одну вызываемую оболочку времени выполнения на процесс для каждого объекта. Если разработчик создает вызываемую оболочку времени выполнения в одном домене приложений или подразделении, а затем передает ссылку в другой домен приложения или подразделение, будет использован посредник для первого объекта. Как показано на следующей иллюстрации, любое количество управляемых клиентов может содержать ссылку на COM-объекты, предоставляющие интерфейсы INew и INewer.
Получение доступа к COM-объектам с помощью вызываемой оболочки времени выполнения
Используя метаданные, полученные из библиотеки документов, среда выполнения создает и вызываемый COM-объект, так и оболочку для него. Каждая вызываемая оболочка времени выполнения содержит кэш указателей интерфейса для COM-объекта, для которого используется эта оболочка, и освобождает ссылку на COM-объект, когда вызываемая оболочка времени выполнения больше не нужна. Среда выполнения выполняет сборку мусора для вызываемой оболочки времени выполнения.
Среди прочих операций, вызываемая оболочка времени выполнения осуществляет маршалинг данных между управляемым и неуправляемым кодом от имени упакованного в оболочку объекта. В частности, вызываемая оболочка времени выполнения выполняет маршалинг аргументов и возвращаемых значений метода, если данные, которыми обмениваются клиент и сервер, представлены в них по-разному.
Стандартная оболочка обеспечивает выполнение встроенных правил маршалинга. Например, когда клиент .NET передает в неуправляемый объект как часть аргумента тип String, оболочка преобразует эту строку в тип BSTR. Если COM-объект возвращает управляемому вызывающему объекту данные типа BSTR, вызывающий объект получит данные типа String. И клиент, и сервер отправляют и получают данные в понятном им представлении. Преобразование других типов не требуется. Например, стандартная оболочка всегда передает 4-байтовое целое число между управляемым и неуправляемым кодом, не преобразуя тип.
См. также
Основные понятия
Маршалинг выбранных интерфейсов
Импорт библиотеки типов в виде сборки