Поделиться через


Доступ к интерфейсам между квартирами

COM позволяет любому квартире в процессе получить доступ к интерфейсу, реализованному на объекте в любой другой квартире в процессе. Это делается с помощью интерфейса IGlobalInterfaceTable. Этот интерфейс имеет три метода, которые позволяют выполнять следующие действия:

  • Зарегистрируйте интерфейс в качестве глобального интерфейса (processwide).
  • Получите указатель на этот интерфейс из любой другой квартиры через файл cookie.
  • Отмена глобальной регистрации интерфейса.

Интерфейс IGlobalInterfaceTable — это эффективный способ хранения указателя интерфейса в расположении памяти, к которому можно получить доступ из нескольких квартир в процессе, таких как переменные на уровне процесса и гибкие объекты (свободные потоки, маршалированные объекты), содержащие указатели интерфейса на другие объекты.

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

Примечание.

Глобальная таблица интерфейсов не переносится через границы процесса или компьютера, поэтому ее нельзя использовать вместо нормального механизма передачи параметров.

 

Сведения о создании и использовании глобальной таблицы интерфейса см. в следующих разделах:

Выбор модели потоков

Многопоточные квартиры

Проблемы с потоковой обработкой сервера

Процессы, потоки и квартиры

Однопоточное и многопоточное взаимодействие

Квартиры с одним потоком