Доступ к интерфейсам между квартирами
COM позволяет любому апартаменту в процессе получить доступ к интерфейсу, реализованному в объекте в любом другом апартаменте в процессе. Это делается через интерфейс IGlobalInterfaceTable. Этот интерфейс имеет три метода, которые позволяют выполнять следующие действия:
- Зарегистрируйте интерфейс в качестве глобального интерфейса (в рамках процесса).
- Получите указатель на этот интерфейс из любой другой квартиры через файл cookie.
- Отмена глобальной регистрации интерфейса.
Интерфейс IGlobalInterfaceTable — это эффективный способ для процесса хранить указатель интерфейса в области памяти, к которой можно получить доступ из нескольких секций процесса, таких как переменные уровня процесса и потоково-независимые объекты (свободно-потоковые и маршализованные объекты), содержащие указатели интерфейса на другие объекты.
Гибкий объект не знает о базовой COM-инфраструктуре, в которой он работает; другими словами, какая квартира, контекст и поток, на которых он исполняется. Объект может содержать интерфейсы, которые относятся к определенной квартире или контексту. По этой причине вызов этих интерфейсов из того, где выполняется гибкий компонент, может не всегда работать должным образом. Глобальная таблица интерфейса избегает этой проблемы, гарантируя, что используется допустимый прокси-сервер (или прямой указатель) к объекту в зависимости от того, где выполняется гибкий объект.
Заметка
Глобальная таблица интерфейсов не переносится через границы процесса или компьютера, поэтому ее нельзя использовать вместо нормального механизма передачи параметров.
Сведения о создании и использовании глобальной таблицы интерфейса см. в следующих разделах:
Связанные разделы