CXXI: C # рдФрд░ C ++ рджреБрдирд┐рдпрд╛ рдХреЗ рдмреАрдЪ рдкреБрд▓

рдореЛрдиреЛ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЧреИрд░-рдиреЗрдЯ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрдкрдХрд░рдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реА ++ рдореЗрдВ рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рд╕рдордЭрджрд╛рд░ рдирд╣реАрдВ рд╣реИред

рд▓реЗрдХрд┐рди рд╡рд╣ рдЬрд▓реНрдж рд╣реА рдПрд▓реЗрдХреНрд╕ рдХреЛрд░рд╛рдбреЛ, рдПрдВрдбреНрд░рд┐рдпрд╛ рдЧреЗрдЯ рдФрд░ рдЬрд╝реЛрд▓реНрдЯрди рд╡рд░реНрдЧ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдирдИ рддрдХрдиреАрдХ C # /ред NET рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ:


CXXI ( рд▓рдЧрднрдЧ рдЕрдиреБрд╡рд╛рджред: "рд╕реЗрдХреНрд╕реА" рдкрдврд╝рддрд╛ рд╣реИ) Google рдХреЗ рд╕рдорд░ рдХреЛрдб рдХреЗ рддрддреНрд╡рд╛рд╡рдзрд╛рди рдореЗрдВ рджреЛ рдорд╣реАрдиреЛрдВ рдХреЗ рдХрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рддрд╛рдХрд┐ C ++ рдХреЛрдб рдХреЗ рд╕рд╛рде рдореЛрдиреЛ рдХреА рдмрд╛рддрдЪреАрдд рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рд╡рд┐рдХрд▓реНрдк


рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдореЛрдиреЛ рдЧреИрд░-рдиреЗрдЯ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдХрдИ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЬреНрдпрд╛рджрд╛рддрд░ рдИрд╕реАрдПрдордП рдорд╛рдирдХ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдЗрди рддрдВрддреНрд░реЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
  1. рдЯреВ-рд╡реЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЗрдирд╡реЛрдХ (рдкреА / рдЗрдирд╡реЛрдХ) рддрдХрдиреАрдХ, рдЬреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб (рд╕реА #) рдХреЛ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдХреЛрдбрдмреИрдХ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддрд╛ рд╣реИред
  2. COM рдЗрдВрдЯрд░реЙрдк рдореЛрдиреЛ рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдЕрдирд╡рд╛рдВрдЯреЗрдб C рдпрд╛ C ++ рдХреЛрдб рдХреЛ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдХреЛрдб рдХреБрдЫ COM рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ (рдпреЗ рдХрдиреНрд╡реЗрдВрд╢рди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИрдВ: рдорд╛рдирдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдорд╛рд░реНрдХрдЕрдк, рдРрдб, рд░рд┐рд▓реАрдЬрд╝ рдФрд░ QueryInterface рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдирдХ рд╕реЗрдЯ рдЬреЛ рдореЛрдиреЛ рдФрд░ COM рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмреАрдЪ рдкрд╛рд░реНрд╕ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред
  3. рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд┐рдВрдЧ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрдХрдиреАрдХ , рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдФрд░ рдЖрдЧреЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╕рдордЭрддреА рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред


рд▓реЗрдХрд┐рди рдЬрдм C # рдореЗрдВ C ++ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рд╡рд┐рдХрд▓реНрдк рдмрд╣реБрдд рдЙрддреНрд╕рд╛рд╣рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдк C # рд╕реЗ рдирд┐рдореНрди C ++ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

class MessageLogger { public: MessageLogger (const char *domain); void LogMessage (const char *msg); } 


рдЗрд╕ рдХрдХреНрд╖рд╛ рдХреЛ C # рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЗрд╕реЗ COM рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░реИрдкрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рдердХрд╛рдК рдФрд░ рдирд┐рдпрдорд┐рдд рд╣реИред рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдирд┐рд░реНрдмрд╛рдз рдЧрддрд┐рд╡рд┐рдзрд┐ рдпрд╣рд╛рдБ рдХреИрд╕реЗ рджрд┐рдЦрддреА рд╣реИ ред

рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдПрдбреЗрдкреНрдЯрд░ рдХреЛ рд░рд┐рд╡рд╛рдЗрд╡ рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕реЗ рддрдм рдкреА / рдЗрдирд╡реЛрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП, рд╡реЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдВрдЧреЗ:

 /* bridge.cpp,   bridge.so */ MessageLogger *Construct_MessageLogger (const char *msg) { return new MessageLogger (msg); } void LogMessage (MessageLogger *logger, const char *msg) { logger->LogMessage (msg); } 

C # рдореЗрдВ рд╣рд┐рд╕реНрд╕рд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 class MessageLogger { IntPtr handle; [DllImport ("bridge")] extern static IntPtr Construct_MessageLogger (string msg); public MessageLogger (string msg) { handle = Construct_MessageLogger (msg); } [DllImport ("bridge")] extern static void LogMessage (IntPtr handle, string msg); public void LogMessage (string msg) { LogMessage (handle, msg); } } 

рдРрд╕реЗ рд░реИрдкрд░ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзреЗ рдШрдВрдЯреЗ рддрдХ рдмреИрдареЗрдВ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓реЗрдЦрдХ, рд╕рдВрдХрд▓рдХ, C ++, C # рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЛ рдорд╛рд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рдирд╢реНрд╡рд░ рдФрд░ рдЕрдкреВрд░реНрдг рджреБрдирд┐рдпрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╖реНрдЯ рдХрд░ рджреЗрдВрдЧреЗред

рд╣рдорд╛рд░рд╛ PhyreEngine # рд╕реЛрдиреА рдХреЗ PhyreEngine рдХреЗ рд▓рд┐рдП .NET C ++ API рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдерд╛ред рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рдердХрд╛рдК рдереА, рдЗрд╕рд▓рд┐рдП рдШреБрдЯрдиреЗ рдкрд░ рд╣рдордиреЗ рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдХреА рддрд░рд╣ рдХреБрдЫ рдХрд┐рдпрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдзрд┐рдпрд╛рдВ рдЖрдкрдХреЛ C # рдХреЛрдб рдХреЗ рд╕рд╛рде C ++ рдХреНрд▓рд╛рд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЙрд▓рдмреИрдХ рдХреЙрд▓ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрд╣реБрдд рдЬрд▓реНрджреА рд▓рдЧрднрдЧ рдЕрд╕рдорд░реНрде рд╣реЛ рдЬрд╛рддреА рд╣реИ (PhyreEngine рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рд╣рдо рдЦреБрдж рдЗрд╕ рдкрд░ рдЖ рдЧрдП)ред

рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдиреЗ CXXI тАЛтАЛрдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред

рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


C ++ рдХрдХреНрд╖рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдЬрдЯрд┐рд▓ рд╣реИред рдореИрдВ C ++ рдХреЛрдб рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдЬреЛ CXXI тАЛтАЛрдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддреЗ рд╣реИрдВ:


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рд╡рд░реНрдЧ рд╣реИ:

 class Widget { public: void SetVisible (bool visible); virtual void Layout (); virtual void Draw (); }; class Label : public Widget { public: void SetText (const char *text); const char *GetText (); }; 


рддрд░реАрдХреЛрдВ рдХреЗ рдЗрди рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП C ++ рдХрдВрдкрд╛рдЗрд▓рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд╛рдо (рд▓рдЧрднрдЧ) рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП GCC рдФрд░ Intel C ++ рдХрдВрдкрд╛рдЗрд▓рд░ рдЬреИрд╕реЗ рдЕрд░реНрде рд╕рдВрдХрд▓рдХ, рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреБрдЫ рдЕрдкрдардиреАрдп рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ рдЬреИрд╕реЗ? H @@ YAXH @ Z; рдЬреАрд╕реАрд╕реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк c + рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; + filt):
__ZN6Widget10SetVisibleEb
__ZN6Widget6LayoutEv
__ZN6Widget4DrawEv
__ZN5Label7SetTextEPKc
__ZN5Label7GetTextEv


рдпрд╣рд╛рдБ рдПрдХ рдХреЛрдб рд╣реИ

  Label *l = new Label (); l->SetText ("foo"); l->Draw (); 


рдпрд╣ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдЧрд╛ (рд╕реА рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡):

  Label *l = (Label *) malloc (sizeof (Label)); ZN5LabelC1Ev (l); //    Label _ZN5Label7SetTextEPKc (l, "foo"); //    Draw (l->vtable [METHOD_PTR_SIZE*2])(); 


рдРрд╕реА рдЪреАрдЬреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CXXI тАЛтАЛрдХреЗ рдХреНрд░рдо рдореЗрдВ, рдЙрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╣реА рд╕реНрдерд╛рди рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдпрд╣ рдЬрд╛рдиреЗрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХрд╣рд╛рдБ рдФрд░ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рд╣реИ, рдФрд░ рд╕рдЬрд╛рдП рдЧрдП рдирд╛рдо рд╕реЗ рдЙрди рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдБрдЪреЗрдВ, рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрд░реЗрдЦ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ C ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА C # рдФрд░ рдЕрдиреНрдп .NET рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХреИрд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрддреА рд╣реИред


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдкрдХрд╛ C ++ рдХреЛрдб рджреЛ рдмрд╛рд░ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред C ++ рдХрдВрдкрд╛рдЗрд▓рд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдирд╡рд╛рдВрдЯреЗрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ CXXI тАЛтАЛрдЯреВрд▓рдХрд┐рдЯ рдмрд╛рдЗрдВрдбрд░реНрд╕ рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, CXXI тАЛтАЛрдХреЛ рдХреЗрд╡рд▓ рдЖрдкрдХреЗ C ++ рдХреЛрдб рд╕реЗ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ C # рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдкреЗрдЯрдирд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рддреЛ CXXI тАЛтАЛрдЕрднреА рднреА рдмрд╛рдЗрдВрдбрд░реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред

CXXI рдЯреВрд▓рдХрд┐рдЯ рдПрдХ рдирд┐рдпрдорд┐рдд .NET рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рддрд╛ рд╣реИ ( рд▓рдЧрднрдЧ рдЕрдиреБрд╡рд╛рджред: рдпрд╣ рдПрдХ рдкреВрд░реНрд╡-рдбреЛрдиреЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬрд┐рд╕рдореЗрдВ MSIL рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рдирд╣реАрдВ рд╣реИ) рдЬрд┐рд╕реЗ рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ C # рдФрд░ рдЕрдиреНрдп .NET рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде C # рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреА рд╣реИ:



CXXI рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рддреАрди рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрд░реЗрдЦ рдореЗрдВ рджрд╛рдИрдВ рдУрд░ рджрд┐рдЦрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред

GCC-XML рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдкрдХреЗ C ++ рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдФрд░ рдЙрд╕рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрдм рдЙрддреНрдкрдиреНрди рд╣реБрдИ XML рдХреЛ CXXI тАЛтАЛрдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ C # рдореЗрдВ рдЖрдВрд╢рд┐рдХ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ C ++ рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреБрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдлрд┐рд░ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдкреАрдЖрдИ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрддрд┐рднрд╛рд░рд┐рдд рддрд░реАрдХреЗ, ToString рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, Async рд╡рд┐рдзрд┐рдпреЛрдВ, рдЖрджрд┐)ред

рдЖрдЙрдЯрдкреБрдЯ рдПрдХ .NET рдЕрд╕реЗрдВрдмрд▓реА рд╣реИ рдЬреЛ рджреЗрд╢реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

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

рдЙрджрд╛рд╣рд░рдг


GitHub рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкрд░реАрдХреНрд╖рдг рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреНрдпреВрдЯреА рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╣реИред

рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХреНрдпрд╛ рдмрдЪрд╛ рд╣реИ


рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, CXXI тАЛтАЛрдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрднреА рддрдХ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ .NET рдФрд░ C ++ рдореЗрдВ рдХреЛрдб рдХреА рдЗрдВрдЯрд░реИрдХреНрд╢рди рдореЗрдВ рдПрдХ рдареЛрд╕ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрдЪреНрдЫрд╛ рд░рд┐рдЬрд░реНрд╡ рд╣реИред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ, CXXI тАЛтАЛрд░рдирдЯрд╛рдЗрдо рдореЗрдВ рд╕рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, System.Reflection.E рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдбреЗрдкреНрдЯрд░ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ, рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░, рдЬреЛ рдЖрдкрдХреЛ C ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП ABI рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╣рдо рд╕реНрдереИрддрд┐рдХ рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рднреА рдЬреЛрдбрд╝рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ PS3 рдФрд░ iPhone рдХреЗ рд▓рд┐рдП C # рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

CXXI рд╡рд░реНрддрдорд╛рди рдореЗрдВ ABI GCC рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ ABI MSVC рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдорд░реНрдерди рд╣реИред рд╣рдо рдЕрдиреНрдп рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП ABI рд╕рдорд░реНрдерди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ MSVC рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрди рд╣реЛрдВрдЧреЗред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ, CXXI тАЛтАЛрдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЕрдиреНрдп рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдорд╛рдирд╡рд░рд╣рд┐рдд рдХреЛрдб рдХреА рджреБрдирд┐рдпрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рд▓реАрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рд╣рдо рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдФрд░ рд░рдирдЯрд╛рдЗрдо рдПрдкреАрдЖрдИ рдХреЛ рдмреЗрд╣рддрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЦреБрдж рдХреЛ рдмрд╛рдВрдзрдиреЗ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ


рдпрд╣ рдкрджреНрдзрддрд┐ C ++ / CLI рдореЗрдВ рдЧреЛрдВрдж-рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓ рд░реВрдк рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рддреА рд╣реИ, рдпрд╣рд╛рдВ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рднреА рдХрд╛рдо рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдм рдХреБрдЫ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рднреА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕реА ++ рдореЗрдВ рдХреНрд▓рд╛рд╕ рддрд░реАрдХреЛрдВ рдХреЛ рдХрд┐рдХ рдХрд░рдиреЗ рдХреЗ рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдЙрд╕ рд╡рд░реНрд╖ рд╣рдм рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд▓реЗрдЦрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдСрди-рдж-рдлреНрд▓рд╛рдИ рд░реИрдкрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ COM рдЗрдВрдЯрд░реЙрдк (рдПрдордПрд╕ рд╕реЗ рд░рдирдЯрд╛рдЗрдо рдкрд░) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдбреЗрдврд╝ рдЧреБрдирд╛ рдЕрдзрд┐рдХ рддреЗрдЬ рдирд┐рдХрд▓рд╛ред
рдЕрд░реЗ рд╣рд╛рдБред рдпрд╣ рд▓реЗрдЦ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЧрд┐рддреБрдм рдкрд░ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЖрдк C ++ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдХрд┐рддрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ? рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рдЕрднреА рдХрд┐рд╕реА рднреА рдкреНрд▓рд╕ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдВрдбрд░реНрд╕ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕рд┐рдЧреНрд╡рд┐рди рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА)ред рдФрд░ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдЗрд╕рдореЗрдВ рдРрд╕реА рд╡рд┐рдзрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд▓реМрдЯрд╛рддреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╕рдордп рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ Qt QObject рдореЗрдВ рдПрдХ рдбрд┐рд▓реАрдЯ () рд╕реНрд▓реЙрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬреЗрдиреЗрд░рд┐рдХ рдЗрд░реЗрдЯреАрдЪ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдВрдбрд░реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдЧрд┐рд░ рдЧрдпрд╛, рдФрд░ рдЬреАрд╕реАрд╕реАрдПрдХреНрд╕рдПрдордПрд▓ рдУрдбреАрдЖрд░ рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛, рдмрд┐рдирд╛ рд╕реНрдЯреИрдб :: рдЯреНрд░ 1 рд╕реЗ рдХреБрдЫ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдПред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдпрд╣ рдХреНрд▓рдЪ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЬреАрд╕реАрд╕реАрдПрдХреНрд╕рдПрдордПрд▓ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬреАрд╕реАрд╕реАрдПрдХреНрд╕рдПрдордПрд▓ рджреНрд╡рд╛рд░рд╛ рдмрд╣реБрдд рдХрдо рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдХреБрдЯрд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХреБрдЫ QtGui рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдмрд╛рдБрдз рд░рд╣реЗ рд╣реИрдВ (рдЕрдкреВрд░реНрдг, рдХрд┐рд╕реА рдиреЗ рдЕрднреА рддрдХ рд╕рднреА рдореЗрдЯрд╛-рд╕реВрдЪрдирд╛ рдФрд░ рд╕рд┐рдЧреНрдирд▓ рд╕реНрд▓реЙрдЯ рдХреЗ рд╕рд╛рде QObject рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ)ред

Source: https://habr.com/ru/post/In142503/


All Articles