рд╕реА ++, рд╕реА-рд╕реНрдЯрд╛рдЗрд▓ рдХрд╛рд╕реНрдЯ рдФрд░ рдЙрдирдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо

C ++ рдХреЛ рдПрдХ рдЯрд╛рдЗрдк рдХрд╛рд╕реНрдЯ (рдкреНрд░рдХрд╛рд░) (рдХрд┐рд╕ рдХрд╛рд╕реНрдЯ) рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ - рдЖрдорддреМрд░ рдкрд░ C рдХрд╛рд╕реНрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред C ++ рдореЗрдВ рдЪрд╛рд░ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд╕реНрдЯ рд╣реИрдВ- static_cast, reinterpret_cast, dynam_cast, const_castред



C ++ рдирд╡реАрдирддрдо рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд░реНрдо рдмрд╣рд╕ рдмреЗрд╣рддрд░ рд╣реИ - C рдХреА рд╢реИрд▓реА рдореЗрдВ рдбрд╛рд▓реА рдЧрдИ рдпрд╛ рд╕рд╣реА рд╕рдВрдпреЛрдЬрди рдореЗрдВ * _cast рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдмрд╣реБрдд рдкрд╣рд▓реЗ рд╢реБрд░реВ рд╣реБрдЖ рдФрд░ рдЖрдЬ рддрдХ рдирд╣реАрдВ рдердорд╛ред рд╣рдо рдЖрдЧ рдореЗрдВ рдИрдВрдзрди рдирд╣реАрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рд╣рдо рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдмреЗрд╣рддрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╕рднреА рдХреЛ рдпрд╣ рддрдп рдХрд░рдиреЗ рджреЗрдВрдЧреЗ рдХрд┐ рдЙрд╕реЗ рдХреНрдпрд╛ рдкрд╕рдВрдж рд╣реИред



рд╡рд┐рдВрдбреЛрдЬ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрдорд╛рдг рдФрд░ COM рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рд░реВрдкрд╛рдВрддрд░рдг рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ рддреЛ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рдПрдВ рдХрд┐рд╕реА рднреА рдЬрдЯрд┐рд▓ рд╡рд░реНрдЧ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВред



рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдЙрджрд╛рд╣рд░рдгред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЙрдкрддрдВрддреНрд░ рдореЗрдВ, рдПрдХ рд╡рд░реНрдЧ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдХрдИ COM рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:



 class CInterfacesImplementor : public IComInterface1, public IComInterface2, public IComInterface3, ...(   4  9), public IComInterface10 { //    };
      
      











рдмреЗрд╢рдХ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ, рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рд╛рд░реНрдердХ рдирд╛рдо рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рд╡реЗ рдПрдХ рджрд░реНрдЬрди рдХреЗ рдХрд░реАрдм рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдмрд╛рдж рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрд╣реБрдд рдорджрдж рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИред



рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ COM рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рддреНрдпрдХреНрд╖ рдпрд╛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ IUnogn рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдФрд░ IUnogn рдореЗрдВ QueryInterface () рд╡рд┐рдзрд┐ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╕рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рд░реЗрдордВрдб рдЪреЗрди рдиреЗ рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ ( рдпрд╣рд╛рдВ , рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИред



рд╣рдорд╛рд░рд╛ рдЙрджрд╛рд╣рд░рдг рд╕рд┐рд░реНрдл рдКрдкрд░ рдХреА рдХрдХреНрд╖рд╛ рдореЗрдВ QueryInterface () рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкреГрд╖реНрдарднреВрдорд┐: рдЬрдм рдХреЛрдИ рдбреЗрд╡рд▓рдкрд░ рдирдП COM рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЙрд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдирд┐рдпреБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реЛрддрд╛ рд╣реИред рдХреЙрд▓рд░ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП QueryInterface () рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдРрд╕реЗ рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░, рдпрджрд┐ рдпрд╣ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреЙрдЗрдВрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред __Uuidof () рдирд┐рд░реНрдорд╛рдг рджреГрд╢реНрдп C ++ рдХреЛ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдХреЛрд╖реНрдардХ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рд╕реНрдерд╛рдирд╛рдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред



рдЗрд╕рд▓рд┐рдП ...

 HRESULT STDMETHODCALLTYPE CInterfaceImplementor::QueryInterface( REFIID iid, void** ppv ) { if( ppv == 0 ) { return E_POINTER; } if( iid == __uuidof( IUnknown ) || iid == __uuidof( IComInterface1 ) ) { *ppv = (IComInterface1*)this; } else if( iid == __uuidof( IComInterface2 ) ) { *ppv = (IComInterface2*)this; } else if( iid == __uuidof( IComInterface3 ) ) { *ppv = (IComInterface3*)this; } else if... ... //       COM- } else { //   COM-     *ppv = 0; return E_NOINTERFACE; } AddRef(); return S_OK; }
      
      







рдХрд╛рд░реНрдп рдХреЗ рдКрдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рдЧрднрдЧ рд╕рд╣реА рд╣реИред рд╡рд╣ рд╕реВрдЪрдХ рдХреЛ dereferencing рд╕реЗ рдкрд╣рд▓реЗ рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдЬреНрдЮрд╛рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЙрд╕рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рд╡рд╣ рдЬрд╛рдВрдЪрддреА рд╣реИред рдпрд╣ E_NOINTERFACE рдХреЛрдб рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ рд▓рд┐рдЦрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрджрд░реНрдн рдЧрдгрдирд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рдорд░реНрдерд┐рдд рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡рд╣ IUnogn рдЕрдиреБрд░реЛрдз рдХрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИред рд░реЗрдордВрдб рдЪреЗрди рдкреНрд░рд╕рдиреНрди рд╣реЛрдЧрд╛ рдпрджрд┐ рдПрдХ рдкреНрд░рд╢реНрди рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред



рднреВрдд рдХреНрдпреЛрдВ рд╣реИрдВ? "* Ppv = this" рдХреНрдпреЛрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛?



рдПрдХрд╛рдзрд┐рдХ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреЗ рд╕рд╛рде, рдСрдмреНрдЬреЗрдХреНрдЯ рдмреЗрд╕ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рдмреЛрдмрд┐рдЬ рдХреЗ "рд░рдЪрд┐рдд" рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд╕рдмрдЬреЗрдХреНрдЯ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХреЗрдВред рдХрд╣реЛ, рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ IComInterface2 * рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЖрдкрдХреЛ рдЗрд╕реЗ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдЙрдк-рдкреНрд░рдХреНрд╖реЗрдкрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд╕реНрддреБ рдХреЛ рдирд╣реАрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдпрд╣ рд╕рдВрднрд╡рддрдГ, рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред



"* Ppv = this?" рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рд╕реЗ, рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХрд╛ рдкрддрд╛ рд╣рд░ рдмрд╛рд░ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕рдХреЗ рдЙрдк-рд╡рд┐рд╖рдп рдирд╣реАрдВ рд╣реЛрддреЗред рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреВрд╕рд░реЗ рд╕рдмреЛрдмрд┐рдЬ рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд▓рдВрдмреА рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред



рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рд╕рд┐рд░реНрдл рдкреЙрдЗрдВрдЯрд░ рд╕рдорд╛рдпреЛрдЬрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рд╕рдмреЛрдмрд┐рдЬ рдореЗрдВ рдПрдХ рд╕рдВрдХреЗрддрдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛред



рдХреНрдпрд╛ рдХреЛрдИ рдЦреБрд╢реА рд╣реИ? рдЗрд╕ рдЕрдиреБрдЪреНрдЫреЗрдж рд╕реЗ рдкрд╣рд▓реЗ - рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред рдЕрдм 100500 рджрд┐рди рдмреАрдд рдЪреБрдХреЗ рд╣реИрдВ, рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣реА рд╣реИ, рдЗрд╕рдореЗрдВ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реА рдЧрдИ рд╣реИред рдЕрдЧрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ, рд╣рдо рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЗ рдЕрд╕рдлрд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВрдЧреЗред рдмрд╕ рдЗрд╕ рдЖрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдХрд┐ "рд╕рд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ" рдХреЗ рд╕рд╛рде "рд╕рд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░" рдФрд░ "рд╕рд╣реА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░" рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдЖрдкрддреНрддрд┐ рди рдХрд░реЗрдВред



рдЙрд╕реА рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдПрдХ рдЕрдиреНрдп рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдореЗрдВ, рдПрдХ рдФрд░ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рд╕рдорд╛рди рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕реЗрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:

 class CYetOtherImplementor : public IComInterface1, public IComInterface3, ...(   4  9), public IComInterface10 { //    };
      
      





рдФрд░, рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдХреЛрдИ рднреА рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рд╕рднреА рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╣реИрдВ:

 HRESULT STDMETHODCALLTYPE CYetOtherImplementor::QueryInterface( REFIID iid, void** ppv ) { if( ppv == 0 ) { return E_POINTER; } if( iid == __uuidof( IUnknown ) || iid == __uuidof( IComInterface1 ) ) { *ppv = (IComInterface1*)this; } else if( iid == __uuidof( IComInterface2 ) ) { *ppv = (IComInterface2*)this; } else if( iid == __uuidof( IComInterface3 ) ) { *ppv = (IComInterface3*)this; } else if... ... //       COM- } else { //   COM-     *ppv = 0; return E_NOINTERFACE; } // V2UncmUgaGlyaW5nIC0gd3d3LmFiYnl5LnJ1L3ZhY2FuY3k= AddRef(); return S_OK; }
      
      





рдЕрдм рдорд╛рдирд╕рд┐рдХ рд░реВрдк рд╕реЗ рдЦреЛрдирд╛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм IComInterface2 рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рдпрдВрддреНрд░рдг рдпрджрд┐ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдИрдПрдл-рдФрд░-рдпрджрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдЧрд╛, рдФрд░ рдлрд┐рд░ рд╕реА-рд╕реНрдЯрд╛рдЗрд▓ рдХрд╛рд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



C ++ рдорд╛рдирдХ ISO / IEC 14882: 2003 (E) рдХреА рдзрд╛рд░рд╛ 5.3.5 / 5 рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ C рд╢реИрд▓реА рдореЗрдВ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╛ рддреЛ static_cast рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ), рдпрд╛ рдпрджрд┐ static_cast рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ reinter_castред



рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреНрд▓рд╛рд╕ рдХреЛ IComInterface2 рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рдерд╛ рдФрд░ рдЗрд╕ рдкреЙрдЗрдВрдЯрд░ рдХреЗ static_cast рдХреЛ рдкреЙрдЗрдВрдЯрд░ рд╕реЗ рдордирдЪрд╛рд╣реЗ рд╕рдмреЛрдмрд┐рдЬ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред



рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╢реНрд░реЗрдгреА рдЕрдм IComInterface2 (рд╣рд╛рдБ, рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдкреНрд▓рд╕ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд╢реЛрдзрди) рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИ, рдЗрд╕рд▓рд┐рдП static_cast рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред Reinterpret_cast рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕ рд╕реВрдЪрдХ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рд╡реИрд╕реЗ, рдСрдмреНрдЬреЗрдХреНрдЯ IComInterface2 рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╢рдмреНрдж "рдЕрдЪрд╛рдирдХ" рдпрд╣рд╛рдБ рдЙрдкрдпреБрдХреНрдд рд╣реИред



рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛, рдЬрдм рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ IComInterface2 рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ рдЬреЛ рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред



рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк if-else-if рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ static_cast рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдХрд▓рдХ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджреЗрдЧрд╛ рдФрд░ рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдпрд╣ рдзреАрд░реЗ рд╕реЗ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╕рдВрдХреЗрдд рджреЗрдЧрд╛ рдХрд┐ рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрдо рдбрд┐рдмрдЧрд┐рдВрдЧ рджрд┐рди, рдЖрдк рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдЬрдм рд╕реЗ рд╣рдо рдпрд╣рд╛рдБ рд╣реИрдВ, рдПрдХ рдФрд░ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рд╣рдорд╕рднреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдбрд╛рдпрдиреЗрдорд┐рдХ_рдХрд╛рд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдХреЙрд▓рд░ рдХреЛ рд╡рд┐рдзрд┐ рдХреЗ рд╕рдлрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реВрдиреНрдп рд╕реВрдЪрдХ рдФрд░ рдПрдХ рдЧрд▓рдд рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛, рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡реНрдпрд░реНрде рдореЗрдВ рд╕рдВрджрд░реНрдн рдХрд╛рдЙрдВрдЯрд░ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдпрд╣ рд░рд┐рд╕рд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рдХреБрдЫ рдШрдВрдЯреЗ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ рдХрдо рд╕реЗ рдХрдо рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рдбрд╛рдпрдирд╛рдорд┐рдХ_рдХрд╛рд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред



рдпрд╣ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕реА-рд╢реИрд▓реА рдХреЗ рднреВрдд рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рдЫреЛрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╣реА рдХреЛрдб рдХреЗ рд▓реЗрдЦрди рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдЙрд╕ рдХреНрд╖рдг рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдЖрдкрдХреЛ рдЕрднреА рднреА рднреВрдд * _рдХрд╛рд╕реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрджрдд рд╣реЛрддреА рд╣реИред



рдирд┐рд╖реНрдХрд░реНрд╖ рд╕реНрдкрд╖реНрдЯ рд╣реИрдВред рдЬрд┐рддрдиреА рдмрд╛рд░ рд╕рдВрднрд╡ рд╣реЛ рд╕реА-рд╕реНрдЯрд╛рдЗрд▓ рднреВрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ - рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛рддреНрдордХ рд▓рд╛рдн рджреЗрдВрдЧреЗ, рдФрд░ рдЖрдк (рдЬреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ) рдПрдХ рджрд┐рди рднреА рдбрд╛рд░реНрд╡рд┐рди рдкреБрд░рд╕реНрдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рджрд┐рдорд┐рддреНрд░реА рдореЗрд╢реНрдЪреЗрд░реАрдХреЛрд╡

рдбрд╛рдЯрд╛ рдПрдВрдЯреНрд░реА рдЙрддреНрдкрд╛рдж рд╡рд┐рднрд╛рдЧ



All Articles