Interface implementation base::RepresentAs: различия между версиями
Строка 8: | Строка 8: | ||
{{function_end}} | {{function_end}} | ||
В случае успешного завершения функции, | Если шаблон [[interface_implementation_base]] специализирован с политикой {{param|interface_ref_ctr_policy}}, определяющей подсчет ссылок, то владение объектом, возвращенным через параметр {{param|ppInterface}}, разделяется с клиентом, вызвавшим [[interface_implementation_base::RepresentAs|RepresentAs]]. В случае, если подсчет ссылок не производится, например, если в качестве {{param|interface_ref_ctr_policy}} указана политика [[ref_ctr_policy_none]], разделения владениея не производится. | ||
Поэтому в случае успешного завершения функции, объект возвращенный через параметр <tt>ppInterface</tt>, необходимо закрывать вызовом его метода [[InterfaceBase::Release|Release]] отдельно и независимо от объекта, над которым применен метод [[interface_implementation_base::RepresentAs|RepresentAs]], но только когда реализация осуществляет подсчет ссылок. | |||
Для проверки доступности того или иного интерфейса предпочтительно использовать метод [[interface_implementation_base::IsInterfaceAvailable|IsInterfaceAvailable]]. | Для проверки доступности того или иного интерфейса предпочтительно использовать метод [[interface_implementation_base::IsInterfaceAvailable|IsInterfaceAvailable]]. | ||
Метод определен только в случае, если преобразование типов задано политикой <tt>interface_conversion_policy</tt>. | Метод определен только в случае, если преобразование типов задано политикой <tt>interface_conversion_policy</tt>. |
Текущая версия на 18:59, 24 сентября 2019
return_code_t PLATFORM_NATIVE_CALLING_CONVENTION RepresentAs(typename interface_conversion_policy::interface_identifier_type type_id, void** ppInterface) noexcept;
Условно определенный метод, который осуществляет преобразование в интерфейс, заданный идентификатором.
- Параметры
type_id Идентификатор интерфейса, имеющий тип interface_conversion_policy::interface_identifier_type. [out] ppInterface Выходной указатель, принимающий интерфейс типа, заданного идентификатором, или 0 в случае ошибки. - Возвращаемое значение:
- 32-битовый целый код ошибки, который в случае успешного выполнения неотрицателен (старший бит сброшен). В случае, если интерфейс, заданный идентификатором, не поддерживается, возвращается код CHSVERROR_INVALID_PARAMETER.
Если шаблон interface_implementation_base специализирован с политикой interface_ref_ctr_policy, определяющей подсчет ссылок, то владение объектом, возвращенным через параметр ppInterface, разделяется с клиентом, вызвавшим RepresentAs. В случае, если подсчет ссылок не производится, например, если в качестве interface_ref_ctr_policy указана политика ref_ctr_policy_none, разделения владениея не производится.
Поэтому в случае успешного завершения функции, объект возвращенный через параметр ppInterface, необходимо закрывать вызовом его метода Release отдельно и независимо от объекта, над которым применен метод RepresentAs, но только когда реализация осуществляет подсчет ссылок.
Для проверки доступности того или иного интерфейса предпочтительно использовать метод IsInterfaceAvailable.
Метод определен только в случае, если преобразование типов задано политикой interface_conversion_policy.