Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
С появлением объектной модели распределенного компонента важно, чтобы пользовательский интерфейс был переизменяем, даже если вы планируете использовать его только в процессе.
MIDL — это не просто способ создания файлов заголовков для интерфейсов. Это язык программирования для удаленного взаимодействия, который позволяет использовать интерфейсы между компьютерами, процессами и границами потоков. Это означает, что перед выпуском программы клиентам необходимо проверить поведение определяемых MIDL интерфейсов в этих условиях. Если вы сделали ошибку в IDL и интерфейс не настроен для удалённого взаимодействия, исправить эту ошибку может быть трудно. Необходимо изменить интерфейс с помощью нового iiD и оставить старый для обратной совместимости или преобразовать каждый клиент и каждый серверный компьютер в одно и то же время.
Даже если интерфейс никогда не будет использоваться вне процесса, его можно использовать между потоками. Наихудшая проблема для незаверленного IDL-файла может возникнуть для серверов внутри процесса, которые не поддерживают несколько однопоточных квартир). Сервер, не указывающий модель потоков, неявно является однопотоковой. Всё, что помечено как однопотоковое, принудительно назначается на поток, который первым вызвал CoInitialize или CoInitializeEx. Если какой-то другой поток был тем, кто активировал объект, все интерфейсы на этом однопоточном сервере должны быть перенаправлены обратно в активирующий поток, что может привести к возвращению REGDB_E_IIDNOTREG в ответ на вызов QueryInterface. Если вы не можете абсолютно утверждать, что интерфейс находится как в процессе, так и всегда будет вызываться в одном потоке, вы будете удалены в некоторое время.
Наконец, в качестве конструктора интерфейсов необходимо рассмотреть, как клиентские приложения будут использовать ваш интерфейс. Два фактора, вместе, определяют, будет ли интерфейс эффективным через границы процессов и машин: частота вызовов методов через границу интерфейса и объем данных, передаваемых в заданном вызове метода. Хотя COM делает межпроцессные и межсетевые вызовы прозрачными для программ, он не может сделать высокочастотные и вызовы с высокой пропускной способностью эффективными в разных адресных пространствах. В некоторых случаях более подходящим является проектирование интерфейсов, которые обычно будут реализованы только как серверы внутри процесса, а другие интерфейсы более подходящи для удаленного использования.