ΠΠΎΠ³Π΄Π° CoMarshalInterface Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΆΠ΅Π»Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠ°Π»ΠΈΠ½Π³, ΡΠΎ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ Π‘ΠΠ-ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π·Π°Π³ΡΡΠ΅ΠΊ (stub manager). ΠΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ Π²ΡΠ΅ΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠΌΠΈ Π·Π°Π³Π»ΡΡΠΊΠ°ΠΌΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π·Π°Π³Π»ΡΡΠ΅ΠΊ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΊΠ°ΠΊ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½Π°Ρ Π΅Π΄ΠΈΠ½ΠΈΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²ΠΎ Π²ΡΠ΅ΠΉ ΡΠ΅ΡΠΈ ΠΈ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΠ΅ΡΡΡ ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΠΠ±ΡΠ΅ΠΊΡΠΎΠ² (Object Identifier β OID), ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²ΠΎ Π²ΡΠ΅Ρ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠ°Ρ . ΠΠ΅ΠΆΠ΄Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°ΠΌΠΈ Π·Π°Π³Π»ΡΡΠ΅ΠΊ ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΠΌΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΠ°ΠΌΠΈ Π‘ΠΠ-ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΠΌΠ΅Π΅ΡΡΡ Π²Π·Π°ΠΈΠΌΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅. ΠΠ°ΠΆΠ΄ΡΠΉ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π·Π°Π³Π»ΡΡΠ΅ΠΊ ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ Π‘ΠΠ-ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΠ°ΠΆΠ΄ΡΠΉ Π‘ΠΠ-ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠ°Π»ΠΈΠ½Π³, Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π·Π°Π³Π»ΡΡΠ΅ΠΊ. ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π·Π°Π³Π»ΡΡΠ΅ΠΊ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½ΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ ΠΎΠ΄Π½Ρ Π½Π΅ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½Π½ΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ΅ΡΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² ΠΏΠ°ΠΌΡΡΠΈ. Π ΡΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π·Π°Π³Π»ΡΡΠ΅ΠΊ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΈΠΌ Π²Π½ΡΡΡΠΈΠΏΡΠΎΡΠ΅ΡΡΠ½ΡΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π·Π°Π³Π»ΡΡΠ΅ΠΊ ΡΠ»Π΅Π΄ΠΈΡ Π·Π° ΡΠΈΡΠ»ΠΎΠΌ Π½Π΅ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½Π½ΡΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΡΡΡΠ»ΠΎΠΊ ΠΈ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π³Π΄Π΅-Π»ΠΈΠ±ΠΎ Π² ΡΠ΅ΡΠΈ ΠΎΡΡΠ°Π½Π΅ΡΡΡ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄Π½Π° Π½Π΅ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½Π½Π°Ρ ΡΡΡΠ»ΠΊΠ°. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π²Π½Π΅ΡΠ½ΠΈΡ ΡΡΡΠ»ΠΎΠΊ ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»ΡΠΌΠΈ, Ρ ΠΎΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠ΅ ΠΌΠ°ΡΡΠ°Π»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π·Π°Π³Π»ΡΡΠΊΠΈ, ΡΡΠΎΠ±Ρ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΠΌΠΈ, ΡΡΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡ Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. ΠΠΎΠ³Π΄Π° Π½Π΅ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½Π½ΡΠ΅ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»ΠΈ ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠΈ ΡΠ½ΠΈΡΡΠΎΠΆΠ°ΡΡΡΡ, Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π·Π°Π³Π»ΡΡΠ΅ΠΊ ΠΈΠ·Π²Π΅ΡΠ°Π΅ΡΡΡ ΠΎΠ± ΡΡΠΎΠΌ ΠΈ Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΠ΅Ρ ΡΠ²ΠΎΠΉ ΡΡΠ΅ΡΡΠΈΠΊ Π²Π½Π΅ΡΠ½ΠΈΡ ΡΡΡΠ»ΠΎΠΊ. ΠΡΠ»ΠΈ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π½Π΅ΡΠ½ΡΡ ΡΡΡΠ»ΠΊΠ° Π½Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π·Π°Π³Π»ΡΡΠ΅ΠΊ, ΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ°ΠΌΠΎΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅ΡΡΡ, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ ΡΠ²ΠΎΠΈ Π½Π΅ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½Π½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΡΠΎ ΠΈΠΌΠΈΡΠΈΡΡΠ΅Ρ ΡΡΡΠ΅ΠΊΡ Π½Π°Π»ΠΈΡΠΈΡ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΡΡΠ»ΠΎΠΊ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΠ΅ΡΠΎΠ΄Ρ ΡΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π·Π° Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ Π·Π°Π³Π»ΡΡΠΊΠΈ Π±ΡΠ΄ΡΡ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡΡΡ Π΄Π°Π»Π΅Π΅ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅.
ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π·Π°Π³Π»ΡΡΠ΅ΠΊ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Π»ΠΈΡΡ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠΈΠ΅ ORPC-Π·Π°ΠΏΡΠΎΡΡ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°[1]. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠΈΠ΅ ORPC-Π·Π°ΠΏΡΠΎΡΡ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ Π·Π°Π³Π»ΡΡΠ΅ΠΊ Π½ΡΠΆΠ΅Π½ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π½Π°Π΅Ρ Π΄Π΅ΡΠ°Π»ΠΈ ΡΠΈΠ³Π½Π°ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΡΠΎΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΠΎΠΉ Π·Π°Π³Π»ΡΡΠΊΠΎΠΉ (interface stub). ΠΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π΄Π΅ΠΌΠ°ΡΡΠ°Π»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ [in], ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ Π² Π±Π»ΠΎΠΊΠ΅ ORPC-Π·Π°ΠΏΡΠΎΡΠ°, Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ Π² Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΌΠ°ΡΡΠ°Π»ΠΈΡΠΎΠ²Π°ΡΡ HRESULT ΠΈ Π»ΡΠ±ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ [out] Π² ΠΎΡΠ²Π΅ΡΠ½ΡΠΉ Π±Π»ΠΎΠΊ ORPC. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠ΅ Π·Π°Π³Π»ΡΡΠΊΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΡΡΡΡ Π²Π½ΡΡΡΠΈ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΡ Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ (Interface Pointer Identifiers β IPIDs), ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π½ΡΡΡΠΈ Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠ° ΡΠ²Π»ΡΡΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ. ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ Π·Π°Π³Π»ΡΡΠ΅ΠΊ, ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½Π°Ρ Π·Π°Π³Π»ΡΡΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, Π° Π½Π΅ ΠΏΡΠΎΡΡΠΎ IUnknown. ΠΠ° ΡΠΈΡ. 5.3 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π²Π·Π°ΠΈΠΌΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΎΠΌ Π·Π°Π³Π»ΡΡΠ΅ΠΊ, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠΌΠΈ Π·Π°Π³Π»ΡΡΠΊΠ°ΠΌΠΈ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ. ΠΡΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠ΅ Π·Π°Π³Π»ΡΡΠΊΠΈ Π·Π½Π°ΡΡ, ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠΉ ΡΠΈΠΏ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.
ΠΠΎΠ³Π΄Π° CoUnmarshalInterface Π΄Π΅ΠΌΠ°ΡΡΠ°Π»ΠΈΡΡΠ΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎ ΠΌΠ°ΡΡΠ°Π»ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ ΡΡΡΠ»ΠΊΡ, ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Π΅ΠΉ (proxy manager). ΠΡΠΎΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Π΅ΠΉ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΊΠ°ΠΊ ΠΊΠΎΠΏΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ Π·Π°Π³Π»ΡΡΠ΅ΠΊ, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π°ΠΏΡΠΈΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½ΠΈ ΠΎΠ± ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Π‘ΠΠ. ΠΠ΄Π½Π°ΠΊΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Π΅ΠΉ Π·Π½Π°Π΅Ρ, ΠΊΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° IUnknown. ΠΡΠ±ΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ AddRef ΠΈΠ»ΠΈ Release ΠΏΡΠΎΡΡΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ ΠΈΠ»ΠΈ ΡΠΌΠ΅Π½ΡΡΠ°ΡΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΡΡΠ΅ΡΡΠΈΠΊ ΡΡΡΠ»ΠΎΠΊ Π² Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ΅ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Π΅ΠΉ ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ORPC. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Release Π² Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ΅ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Π΅ΠΉ ΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅Ρ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Ρ, ΠΏΠΎΡΡΠ»Π°Ρ Π² Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ΠΈΠΈ ΡΠ²ΡΠ·ΠΈ. ΠΠ°ΠΏΡΠΎΡΡ QueryInterface Π² Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ΅ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Π΅ΠΉ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½Π°ΡΠ΅. ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ Π·Π°Π³Π»ΡΡΠ΅ΠΊ, Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Π΅ΠΉ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π°ΠΏΡΠΈΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°Ρ Π‘ΠΠ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Π΅ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠ΅ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»ΠΈ, Π²ΡΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΠ΄Π΅Ρ Π·Π°ΠΏΡΠΎΡ. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠΉ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π²ΡΠ·ΠΎΠ²Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Π² Π·Π°ΠΏΡΠΎΡΡ ORPC. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° Π·Π°Π³Π»ΡΡΠ΅ΠΊ, Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Π΅ΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΠΈΠ΄ΠΈΠΌΡΠΌ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ², ΠΈ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠ΅ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»ΠΈ Π°Π³ΡΠ΅Π³ΠΈΡΡΡΡΡΡ Π² ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Π΅ΠΉ. ΠΡΠΎ ΡΠΎΠ·Π΄Π°Π΅Ρ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈΠ»Π»ΡΠ·ΠΈΡ, ΡΡΠΎ Π²ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π²ΡΡΡΠ°Π²Π»ΡΡΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ Π‘ΠΠ-ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ. ΠΠ° ΡΠΈΡ. 5.4 ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΎΠΌ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Π΅ΠΉ, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠΌΠΈ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»ΡΠΌΠΈ ΠΈ Π·Π°Π³Π»ΡΡΠΊΠΎΠΉ.
ΠΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡ. 5.4, Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Ρ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ Π·Π°Π³Π»ΡΡΠΊΠΎΠΉ ΡΠ΅ΡΠ΅Π· ΡΡΠ΅ΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΊΠ°Π½Π°Π»ΠΎΠΌ. ΠΠ°Π½Π°Π» β ΡΡΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΠ°Ρ Π‘ΠΠ ΠΎΠ±Π΅ΡΡΠΊΠ° Π²ΠΎΠΊΡΡΠ³ ΡΠ»ΠΎΡ RPC Π½Π° ΡΡΠ°ΠΏΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ°Π½Π°Π» Π²ΡΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ IRpcChannelBuffer
[ uuid(D5F56B60-593B-101A-B569-08002B2DBF7A), local, object ]
interface IRpcChannelBuffer : IUnknown {
// programmatic representation of ORPC message
// ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ORPC
typedef struct tagRPCOLEMESSAGE {
void *reserved1;
unsigned long dataRepresentation;
// endian/ebcdic
// endian /ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ Π΄Π²ΠΎΠΈΡΠ½ΠΎ-Π΄Π΅ΡΡΡΠΈΡΠ½ΡΠΉ ΠΊΠΎΠ΄
// Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ
void *Buffer;
// payload goes here
// ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ Π½Π°Π³ΡΡΠ·ΠΊΠ° ΠΈΠ΄Π΅Ρ ΡΡΠ΄Π°
ULONG cbBuffer;
// length of payload
// Π΄Π»ΠΈΠ½Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΈ
ULONG iMethod;
// which method?
// ΡΠ΅ΠΉ ΠΌΠ΅ΡΠΎΠ΄?
void *reserved2[5];
ULONG rpcFlags;
} RPCOLEMESSAGE;
// allocate a transmission buffer
// Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌ Π±ΡΡΠ΅Ρ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ
HRESULT GetBuffer([inl RPCOLEMESSAGE *pMessage,
[in] REFIID riid);
// send an ORPC request and receive an ORPC response
// ΠΏΠΎΡΡΠ»Π°Π΅ΠΌ ORPC-Π·Π°ΠΏΡΠΎΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ORPC-ΠΎΡΠ²Π΅Ρ
HRESULT SendReceive([in,out] RPCOLEMESSAGE *pMessage,
[out] ULONG *pStatus);
// deallocate a transmission buffer
// ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΠΌ Π±ΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ
HRESULT FreeBuffer([in] RPCOLEMESSAGE *pMessage);
// get distance to destination for CoMarshalInterface
// ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ Π΄ΠΎ Π°Π΄ΡΠ΅ΡΠ°ΡΠ° Π΄Π»Ρ CoMarshalInterface
HRESULT GetDestCtx([out] DWORD *pdwDestCtx,
[out] void **ppvDestCtx);
// check for explicit disconnects
// ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠ²Π½ΡΠ΅ ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ
HRESULT IsConnected(void);
}
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠ΅ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ SendReceive ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΡΡΠΎΠ±Ρ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΊΠ°Π½Π°Π» ΠΏΠΎΡΠ»Π°ΡΡ Π±Π»ΠΎΠΊ Π·Π°ΠΏΡΠΎΡΠΎΠ² ORPC ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±Π»ΠΎΠΊ ΠΎΡΠ²Π΅ΡΠΎΠ² ORPC.
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠ΅ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»ΠΈ ΠΈ Π·Π°Π³Π»ΡΡΠΊΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ Π²Π½ΡΡΡΠΈΠΏΡΠΎΡΠ΅ΡΡΠ½ΡΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Π‘ΠΠ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°ΠΌΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Π΅ΠΉ ΠΈ Π·Π°Π³Π»ΡΡΠ΅ΠΊ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΠΎΠΉ Π‘ΠΠ-ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π°ΠΊΡΠΈΠ²ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½Π°Ρ Π·Π°Π³Π»ΡΡΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΡΡΠ°Π²ΠΈΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ IRpcStubBuffer:
[ uuid(D5F56AFC-593B-101A-B569-08002B2DBF7A), local, object ]
interface IRpcStubBuffer : IUnknown {
// called to connect stub to object
// Π²ΡΠ·Π²Π°Π½ Π΄Π»Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π·Π°Π³Π»ΡΡΠΊΠΈ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ
HRESULT Connect([in] IUnknown *pUnkServer),
// called to inform stub to release object
// Π²ΡΠ·Π²Π°Π½ Π΄Π»Ρ ΠΈΠ½ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π°Π³Π»ΡΡΠΊΠΈ ΠΎΠ± ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
void Disconnect(void);
// called when ORPC request arrives
// Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΡΡΠΏΠ°Π΅Ρ Π·Π°ΠΏΡΠΎΡ ORPC
HRESULT Invoke ([in] RPCOLEMESSAGE *pmsg,
[in] IRpcChannelBuffer *pChannel);
// used to support multiple itf types per stub
// ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ²
// Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΉ Π·Π°Π³Π»ΡΡΠΊΠΈ
IRpcStubBuffer *IsIIDSupported([in] REFIID riid);
// used to support multiple itf types per stub
// ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ²
// Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΉ Π·Π°Π³Π»ΡΡΠΊΠΈ
ULONG CountRefs(vold);
// used by ORPC debugger to find pointer to object
// ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΎΠΌ ORPC Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ
HRESULT DebugServerQueryInterface(void **ppv);
// used by ORPC debugger to release pointer to object
// ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΎΠΌ ORPC Π΄Π»Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ
void DebugServerRelease(void *pv);
}
ΠΠ΅ΡΠΎΠ΄ Invoke Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ Π‘ΠΠ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΡΡΠΏΠΈΡ Π·Π°ΠΏΡΠΎΡ ORPC Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΡΠΈ Π²Π²ΠΎΠ΄Π΅ ΠΌΠ°ΡΡΠ°Π»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ [in]-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π±ΡΠ΄ΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² RPCOLEMESSAGE, Π° ΠΏΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ Π·Π°Π³Π»ΡΡΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΌΠ°ΡΡΠ°Π»ΠΈΡΠΎΠ²Π°ΡΡ HRESULT ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈ Π»ΡΠ±ΡΠ΅ [out]-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Ρ Π² Π±Π»ΠΎΠΊΠ΅ ΠΎΡΠ²Π΅ΡΠΎΠ² ORPC.
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠΉ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΡΡΠ°Π²Π»ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ (ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ), Π·Π° ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΠ½ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ, Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ IRpcProxyBuffer:
[ uuid(D5F56A34-593B-101A-B569-08002B2DBF7A), local, object ]
interface IRpcProxyBuffer : IUnknown {
HRESULT Connect([in] IRpcChannelBuffer *pChannelBuffer);
void Disconnect(void);
}
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ IRpcPΠ³oxΡBuffer Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π½Π΅Π΄Π΅Π»Π΅Π³ΠΈΡΡΡΡΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ IUnknown ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Ρ. ΠΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠΉ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Ρ, Π΄ΠΎΠ»ΠΆΠ½Ρ Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°ΡΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Π΅ΠΉ ΡΠ²ΠΎΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ IUnknown. ΠΠΌΠ΅Π½Π½ΠΎ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΡΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠΉ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°Π½Π°Π» Π΄Π»Ρ ΠΏΠΎΡΡΠ»ΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ² ORPC Π½Π° ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΠΎΠΉ Π·Π°Π³Π»ΡΡΠΊΠΈ Invoke, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π² Π°ΠΏΠ°ΡΡΠ°ΠΌΠ΅Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠ΅ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»ΠΈ ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠ΅ Π·Π°Π³Π»ΡΡΠΊΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΅Π΄ΠΈΠ½ΡΠΉ CLSID ΠΊΠ°ΠΊ Π΄Π»Ρ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π»Ρ, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ Π·Π°Π³Π»ΡΡΠΊΠΈ. Π’Π°ΠΊΡΡ ΡΠ°Π·Π΄Π²ΠΎΠ΅Π½Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°ΡΡΠΎ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠΌ ΠΌΠ°ΡΡΠ°Π»Π΅ΡΠΎΠΌ (interface marshaler). ΠΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠ°Π»Π΅ΡΠ° Π²ΡΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ IPSFactoryBuffer: