Клиенты и серверы COM
Критически важным аспектом COM является взаимодействие клиентов и серверов. Клиент COM — это любой код или объект, который получает указатель на COM-сервер и использует свои службы, вызывая методы своих интерфейсов. COM-сервер — это любой объект, предоставляющий службы клиентам; Эти службы имеют вид реализаций COM-интерфейса, которые могут вызываться любым клиентом, который может получить указатель на один из интерфейсов в объекте сервера.
Существует два main типа серверов: внутрипроцессные и внепроцессные. Внутрипроцессные серверы реализуются в динамической связанной библиотеке (DLL), а внепроцессные серверы — в исполняемом файле (EXE). Внепроцессные серверы могут находиться либо на локальном компьютере, либо на удаленном компьютере. Кроме того, COM предоставляет механизм, позволяющий внутрипроцессный сервер (DLL) выполняться в суррогатном процессе EXE, чтобы получить преимущество запуска процесса на удаленном компьютере. Дополнительные сведения см. в разделе Суррогаты DLL.
Модель программирования и конструкции COM теперь расширены, чтобы клиенты и серверы COM могли работать вместе по сети, а не только на определенном компьютере. Это позволяет существующим приложениям взаимодействовать с новыми приложениями и друг с другом в сетях с правильным администрированием, и новые приложения могут быть написаны, чтобы воспользоваться преимуществами сетевых функций.
Клиентским приложениям COM не нужно знать, как упаковываются серверные объекты, будь то внутрипроцессные объекты (в библиотеках DLL) или как локальные или удаленные объекты (в EXEs). Кроме того, распределенная модель COM позволяет упаковать объекты в виде приложений-служб, синхронизируя COM с широкими возможностями администрирования и интеграции системы Windows.
В этой документации аббревиатура COM используется в качестве предпочтительного для DCOM. Это связано с тем, что DCOM не является отдельным; это просто COM с более длинным проводом. В случаях, когда описываемое является конкретно удаленной операцией, используется термин распределенная COM .
Com предназначен для добавления поддержки прозрачности расположения, которая распространяется на сеть. Он позволяет приложениям, написанным для отдельных компьютеров, работать по сети и предоставляет функции, расширяющие эти возможности и обеспечивающие безопасность, необходимую в сети. (Дополнительные сведения см. в разделе Безопасность в COM.)
COM задает механизм, с помощью которого код класса может использоваться многими различными приложениями.
Дополнительные сведения см. в следующих разделах:
- Получение указателя на объект
- Создание объекта с помощью объекта класса
- Обязанности сервера COM
- Состояние постоянного объекта
- Предоставление сведений о классе
- Взаимодействие между объектами
Обязанности сервера COM
Одним из наиболее важных способов получения указателя на объект для клиента является запрос на запуск сервера и создание и активация экземпляра объекта, предоставленного сервером. Сервер несет ответственность за правильное выполнение этой задачи. В этом есть несколько важных частей.
Сервер должен реализовать код для объекта класса с помощью реализации интерфейса IClassFactory или IClassFactory2 .
Сервер должен зарегистрировать свой ИДЕНТИФИКАТОР CLSID в системном реестре на компьютере, на котором он находится, и более того, имеет возможность опубликовать свое расположение компьютера в других системах в сети, чтобы клиенты могли вызывать его, не требуя от клиента знать расположение сервера.
Сервер в первую очередь отвечает за безопасность; то есть, по большей части сервер определяет, будет ли он предоставлять клиенту указатель на один из своих объектов.
Внутрипроцессные серверы должны реализовывать и экспортировать определенные функции, позволяющие клиентскому процессу создавать их экземпляры.
В следующих разделах подробно описаны обязанности COM-сервера.
- Реализация IClassFactory
- Licensing и IClassFactory2
- Регистрация COM-серверов
- Вспомогательные средства реализации сервера вне процесса
- Создание и оптимизация GUID
COM Clients and Servers
A critical aspect of COM is how clients and servers interact. A COM client is whatever code or object gets a pointer to a COM server and uses its services by calling the methods of its interfaces. A COM server is any object that provides services to clients; these services are in the form of COM interface implementations that can be called by any client that is able to get a pointer to one of the interfaces on the server object.
There are two main types of servers, in-process and out-of-process. In-process servers are implemented in a dynamic linked library (DLL), and out-of-process servers are implemented in an executable file (EXE). Out-of-process servers can reside either on the local computer or on a remote computer. In addition, COM provides a mechanism that allows an in-process server (a DLL) to run in a surrogate EXE process to gain the advantage of being able to run the process on a remote computer. For more information, see DLL Surrogates.
The COM programming model and constructs have now been extended so that COM clients and servers can work together across the network, not just within a given computer. This enables existing applications to interact with new applications and with each other across networks with proper administration, and new applications can be written to take advantage of networking features.
COM client applications do not need to be aware of how server objects are packaged, whether they are packaged as in-process objects (in DLLs) or as local or remote objects (in EXEs). Distributed COM further allows objects to be packaged as service applications, synchronizing COM with the rich administrative and system-integration capabilities of Windows.
Throughout this documentation the acronym COM is used in preference to DCOM. This is because DCOM is not separate;it is just COM with a longer wire. In cases where what is being described is specifically a remote operation, the term distributed COM is used.
COM is designed to make it possible to add the support for location transparency that extends across a network. It allows applications written for single computers to run across a network and provides features that extend these capabilities and add to the security necessary in a network. (For more information, see Security in COM.)
COM specifies a mechanism by which the class code can be used by many different applications.
For more information, see the following topics:
- Getting a Pointer to an Object
- Creating an Object Through a Class Object
- COM Server Responsibilities
- Persistent Object State
- Providing Class Information
- Inter-Object Communication
При подготовке материала использовались источники:
https://learn.microsoft.com/ru-ru/windows/win32/com/com-clients-and-servers
https://learn.microsoft.com/ru-ru/windows/win32/com/com-server-responsibilities
https://learn.microsoft.com/en-us/windows/win32/com/com-clients-and-servers