Microsoft DirectX 2

туристический портал          

C ++ и интерфейс COM


В C ++ программе интерфейс COM  подобен абстрактному основному классу. То есть  определяет набор сигнатур и семантики, но не  реализацию, и никакие данные состояния не связаны с интерфейсом. В C ++ абстрактном основном классе все методы определены как « pure virtual « что означает, что они не имеют никакого кода, связанного с ними.

Чистые действительные функции C ++ и COM связываются с помощью устройства называемого vtable. Vtable содержит адреса всех функций, которые выполняют данный интерфейс. Если Вы хотите, чтобы программа или объект использовали эти функции, Вы должны  использовать метод QueryInterface , чтобы проверить, что  интерфейс существует, и получить указатель на этот интерфейс. То что ваша программа или объект фактически получает от объекта после посылки QueryInterface -это указатель на vtable, через который этот метод может вызывать методы интерфейса, связанные с объектом. Этот механизм полностью изолирует частные данные, используемые объектом и вызывающим процессом пользователя.

Другое подобие объектов COM с объектами C ++ - то, что первый параметр метода является именем интерфейса или класса, называемого  в C ++ this. Так как объекты COM и объекты C ++ полностью двоично совместимы, транслятор обрабатывает интерфейсы COM подобно абстрактному классу C ++  и принимает тот же самый синтаксис. Это является результатом менее сложного кода. Например, параметр this в C ++ обрабатывается неявно через vtable, поскольку параметр не кодированный.



Содержание раздела