рдпрд╣ P / Invoke рдХреНрдпрд╛ рд╣реИ рдкрд░ рдПрдХ рдФрд░ рд▓реЗрдЦ рдирд╣реАрдВ рд╣реИред
рддреЛ, рдЪрд▓реЛ рдПрдХ рдЧреЛрд▓рд╛рдХрд╛рд░ C # рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рдРрд╕реА рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ .NET рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛ рднреА рд╡рд┐рдВрдбреЛрдЬ рдПрд╕рдбреАрдХреЗ 8.1 рд╣реИ рдЙрд╕рдореЗрдВ рд╕реА / рд╕реА ++ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред рдЖрдкрдХреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рдВрд░реЗрдЦрдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдЖрд╡рд░рдг рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдмрд╣реБрдд рд╕реЗ рдирд┐рдпрдорд┐рдд рдХрд╛рдо рд╣реИрдВ, рдФрд░ рдЧрд▓рддреА рдХрд░рдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рд╣реИред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдкрд╛рд░реНрд╕рд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ ... рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдорд╛рдирд╡-рдШрдВрдЯреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдпрдерд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдХреНрд╖рдорддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд╕рдЦреНрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХреА рдЬрд╛рдПрдЧреА, рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдкреНрд░рдмрдВрдзрд┐рдд рдФрд░ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рдХреА рд╕рд╣рднрд╛рдЧрд┐рддрд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, .NET рдореЗрдВ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ 2 рдореБрдЦреНрдп рддрд░реАрдХреЗ рд╣реИрдВ:
- рд╕реА ++ / рд╕реАрдПрд▓рдЖрдИ : рдЖрдк рд░реИрдкрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ - рдкреНрд░рдмрдВрдзрд┐рдд рддрд░реАрдХреЛрдВ рдореЗрдВ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдХреЙрд▓ рд▓рдкреЗрдЯреЗрдВ, рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдореВрд▓ рд╕рдВрд░рдЪрдирд╛, рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдФрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░реЗрдВред рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рдпрд╣ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд▓рдЪреАрд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдиреБрдХрд╕рд╛рди рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдХреЛрдб рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдорд╛рдирд╡ рд░рд╣рд┐рдд, рдХреНрд░рдорд╢рдГ, рдЧрд▓рддреА рдХрд░рдиреЗ рдХрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рдЬреЛрдЦрд┐рдо (рдХреЗрд╡рд▓ рджреЗрд╡рддрд╛ рдФрд░ рдЭреВрда рдмрд┐рдирд╛ рдмрдЧ рдХреЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ)ред
рджреВрд╕рд░реЗ, рдирд╛рдЦреВрдиреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкрд░рд┐рдгрд╛рдореА рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ - x64, x86, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреВрд░реА AnyCPU рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдХрдИ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рд░реИрдкрд░ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрди рд╕рднреА рдХреЛ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдЦреАрдВрдЪрдирд╛ рд╣реЛрдЧрд╛, рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдпрд╛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд▓реЛрдб рдХрд░рдирд╛ред рд╡рд┐рдиреНрдпрд╛рд╕ред
рддреАрд╕рд░рд╛, рдпрд╣ C ++ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
- P / Invoke рдФрд░ COM : COM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рд╡рд┐рдВрдбреЛрдЬрд╝ рдШрдЯрдХ рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, .net рдЗрд╕ рддрдХрдиреАрдХ рдХреЗ рд╕рд╛рде рдпрдереЛрдЪрд┐рдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрд╡рд╢реНрдпрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдпрд╛ рддреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ, рдпрд╛, рдпрджрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд╢реЗрд╖ tbbimp рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд╣рд╛рдВ рд╕реЗ рдЖрдпрд╛рдд рдХрд░реЗрдВред
рдФрд░ рдЖрдк DllImport рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рд╣реНрдп рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдХреЗ рдбрд╛рдпрдирд╛рдорд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдкреВрд░реА рд╕рд╛рдЗрдЯ рд╣реИ рдЬрд╣рд╛рдБ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдореБрдЦреНрдп winapi рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рд╣рдореЗрдВ
рдЯрд╛рдЗрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рд░рд╣рдиреЗ рджреЗрдВред рдкреНрд░рдХрд╛рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдирд╛рдо рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ, рдФрд░ IDL рд╕рдВрдХрд▓рд┐рдд рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ - рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рднрд╛рд╖рд╛ - рдПрдХ рднрд╛рд╖рд╛ рдЬрд┐рд╕рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реА рдХреЗ рд╕рдорд╛рди рд╕реБрдВрджрд░ рд╣реИред рдкреНрд░рдХрд╛рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдорддреМрд░ рдкрд░ рдпрд╛ рддреЛ .lb рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ рдпрд╛ рдЙрд╕реА рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рд╣реЛрддреА рд╣реИрдВред рдбреАрдПрд▓рдПрд▓ рдЬрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рд╡рд╕реНрддреБрдПрдВ рд╕реНрдерд┐рдд рд╣реИрдВред рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд tlbimp рдЙрдкрдпреЛрдЧрд┐рддрд╛ .NET рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдШреЛрд╖рдгрд╛рдУрдВ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЗрдВрдЯрд░реЛрдк рдЕрд╕реЗрдВрдмрд▓реА рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИред
рдЪреВрдВрдХрд┐ рдЖрдИрдбреА рд╣реЗрдбрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реА рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рдПрдХ .net рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЙрддреНрдкрдиреНрди рдХреА рдЬрд╛рдП? рдпрджрд┐ IDL рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдк рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ DWORD рдХреЛ uint рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗ рдмрд┐рдирд╛ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, IDL рд╕рдм рдХреБрдЫ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, tlbimp рд╕рдм рдХреБрдЫ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ:
- рдЖрдк IDL рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ
- рдмрд┐рдЯ рдлрд╝реАрд▓реНрдб рдХреЛ IDL рдореЗрдВ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- tlbimp рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЕрдкреНрд░рд╛рдкреНрдд рдЗрдВрдЯрдкреНрд░реЗрдЯ рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд┐рд╢рд╛рд▓ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
- рдпрджрд┐ рдХрд┐рд╕реА рдкрджреНрдзрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдкрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ tlbimp рд░реЗрдлрд░реА рдЬреИрд╕реЗ рддрд░реНрдХ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдЧрд╛ред рдФрд░ рдЕрдЧрд░ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдпрд╣ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ рд╕рд░рдгреА рдХрд╛ рдкрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣рд╛рдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рд╣рдо рдЬрдВрдЧрд▓ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдЖрдк рдкрд┐рди рдХрд┐рдП рдЧрдП рд╕рд░рдгреА рдХреЗ рдЕрд╢рдХреНрдд рддрддреНрд╡ рдХреЛ рд░реЗрдл рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдХрд╛рдо рднреА рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рд╣рд┐рдВрджреВ рджрд┐рдЦрддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рд░реЗрдл рдХреЗ рдХрд╛рд░рдг, рд╣рдо рдПрдХ рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ рдХреЛ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ рдпрджрд┐ рддрд░реНрдХ рдЕрдЪрд╛рдирдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ
- Tlbimp рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ C- рд╢реИрд▓реА рдХреЗ рдирд▓-рдЯрд░реНрдорд┐рдиреЗрдЯреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ (a la LPWSTR) рдореЗрдВ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЕрдЪрд╛рдирдХ рдЦрд░рд╛рдм COM рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдореЛрд░реА рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдкрд░ рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди "рдХреНрд╡реИрдХ" рдХрд╣реЗрдЧрд╛
- tlbimp рдХреЗрд╡рд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред DLL рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛
- tlbimp рдЕрд╕реЗрдВрдмрд▓реА рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб рдирд╣реАрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ
Tlbimp рдХреЗ рд╕рд╛рде рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рд╣рдо рдЗрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдо рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд▓рд┐рдЦреЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдЖрдИрдбреАрдПрд▓ рдХреЗ рд╕рд╛рде, рд╕реНрдерд┐рддрд┐ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ - рдЖрдкрдХреЛ рд╢рдорди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реВрдВ:
рдЪреВрдВрдХрд┐ рдЯрд╛рдЗрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗрд╡рд▓ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдХрдбрд╝реА рд╣реЛрдЧреА, рд╣рдо рдХрд┐рд╕реА рднреА рдорд╛рдирдХ, рдЕрдЪреНрдЫреЗ рдлреЙрд░реНрдо рдЖрджрд┐ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рдПрдВрдЧреЗред рдФрд░ рд╣рдо рдЗрд╕рдореЗрдВ рд╕рдм рдХреБрдЫ рдЙрд╕ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ ред
рдЖрдИрдбреАрдПрд▓
рдореИрдВ рдЗрд╕ рднрд╛рд╖рд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдИрдбреАрдПрд▓ рдХреЗ рдкреНрд░рдореБрдЦ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдЧрд╛, рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред IDL рдХрд╛ рдкреВрд░рд╛ рд╡рд┐рд╡рд░рдг
msdn рдореЗрдВ рд╣реИIDL рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореБрдЦреНрдп рдмреНрд▓реЙрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдореМрдЬреВрдж рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмреНрд▓реЙрдХ рдХреЗ рдмрд╛рд╣рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмреНрд▓реЙрдХ рдХреЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЪреНрдЫреЗ рдХреЗ рд▓рд┐рдП, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмреНрд▓реЙрдХ рдореЗрдВ рдПрдХ рдирд╛рдо рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрдИ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрд╕рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
[uuid(00000000-0000-0000-0000-000000000001)] library Import { }
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рдЕрднреА рднреА рдмреНрд▓реЙрдХ рдХреЗ рдмрд╛рд╣рд░ рдШреЛрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЛ рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЕрдВрджрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ
typedef MY_TYPE MY_TYPE;
рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдШреЛрд╖рдгрд╛рдПрдБ рд╣реИрдВред рд╣рдореЗрдВ рд╕реНрдЯреНрд░рдХреНрдЪрд░, рдпреВрдирд┐рдпрди, рдПрдирдо, рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдкрд╣рд▓реЗ рддреАрди рдмрд┐рд▓реНрдХреБрд▓ рд╕реА рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрди рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗред рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрд┐ рдЗрд╕ рдШреЛрд╖рдгрд╛ рдХреЗ рд╕рд╛рде рд╣реИ:
typedef struct tagTEST { int i; } TEST;
рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдирд╛рдо рдЯреИрдЧрдЯреЗрд╕реНрдЯ рд╣реИ, рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЙрдкрдирд╛рдо рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдВрддрддрдГ рдирд╛рдо рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЪреВрдВрдХрд┐ рд╕рдВрд░рдЪрдирд╛ рдШреЛрд╖рдгрд╛рдУрдВ рдореЗрдВ рдХрдИ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд▓реЗ рдЙрдкрд╕рд░реНрдЧ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЧрдбрд╝рдмрдбрд╝реА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╛рдореЛрдВ рдореЗрдВ рдХреБрдЫ рдЙрдкрд╛рдп рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕реА рдореЗрдВ рдЖрдИрдбреАрдПрд▓ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдирд╛рдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдВрдЯрд░рдлреЗрд╕ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░:
[uuid(38BF1A5B-65EE-4C5C-9BC3-0D8BE47E8A1F)] interface IXAudio2MasteringVoice : IXAudio2Voice { HRESULT GetChannelMask(DWORD* pChannelmask); };
рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ, рдХреЗрд╡рд▓ рдпреВрдЖрдИрдбреА, рдЬреЛ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ, рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмреНрд▓реЙрдХ рднреА рд╣реИред рдЗрд╕рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк DLL, рдпрд╛ рдХреБрдЫ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
[dllname("kernel32.dll")] module NativeMethods_kernel32 { const UINT DONT_RESOLVE_DLL_REFERENCES = 0x00000001; [entry("RtlMoveMemory")] void RtlMoveMemory( void *Destination, const void *Source, SIZE_T Length); }
Dllname рдФрд░ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдпрд╣рд╛рдБ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдХрд╣рд╛рдБ рд╕реЗ рд▓реЛрдб рдХреА рдЬрд╛рдПрдЧреАред рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдПрдХ рдирд╛рдо рдХреЗ рдмрдЬрд╛рдп рдХреНрд░рдорд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдИрдбреАрдПрд▓ рд╡рд┐рдЬреНрдЮрд╛рдкрди
рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдХреНрдпрд╛ рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рддреЗ рд╣реИрдВ:
- рд╕рдВрд░рдЪрдирд╛рдУрдВ рдФрд░ рд╕рдВрдШреЛрдВ, рд╕рд╣рд┐рдд рдереЛрдбрд╝реЗ рдЦреЗрддреЛрдВ рдХреЗ рд╕рд╛рде
- рд╕реНрдерд╛рдирд╛рдВрддрд░рдг
- рдбреАрдПрд▓рдПрд▓ рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреА рдШреЛрд╖рдгрд╛
- рдЗрдВрдЯрд░рдлреЗрд╕
- рд╕реНрдерд┐рд░рд╛рдВрдХ (рдореИрдХреНрд░реЛ #define рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд)
- рдХрд╛рд░реНрдп рдмрд┐рдВрджреБ
- рдПрд▓рд┐рдпрд╛рд╕ рдЯрд╛рдЗрдкреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ (рдЬреИрд╕реЗ рдХрд┐ DWORDs рдХреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░, рдЖрджрд┐)
рдЕрдм рд╣рдореЗрдВ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЖрдИрдбреАрдПрд▓ рдореЗрдВ рдХреИрд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПред
- рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╕рдВрдШ : рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рдирд╛рдо рд╕реЗ рдХреЗрд╡рд▓ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реБрдП рдХреЙрдкреА рдХрд░реЗрдВред
- рдЧрдгрдирд╛ : рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рдорд╛рдиред
- рдбреАрдПрд▓рдПрд▓ рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ : рдЗрд╕реА рдбреАрдПрд▓рдПрд▓ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдмреНрд▓реЙрдХ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ DLL рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмреНрд▓реЙрдХ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
- рд╕реНрдерд┐рд░рд╛рдВрдХ (#define рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШреЛрд╖рд┐рдд) : рдмреЗрд╢рдХ, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдЖрдкрдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рдЕрд░реНрдерд╛рддреН рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╕реНрдерд┐рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИ
#define DONT_RESOLVE_DLL_REFERENCES 0x00000001
рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ - рдореИрдХреНрд░реЛрдЬрд╝ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЯрд╛рдЗрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реИрдВ рдЬреИрд╕реЗ GUIDs DEFINE_GUID рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рд╣реИрдВред рдареАрдХ рд╣реИ, рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпреЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрдиреНрд╣реЗрдВ рдЖрдорддреМрд░ рдкрд░ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ, рдЕрдлрд╕реЛрд╕, рдХреБрдЫ рднреА рдирд╣реАрдВред рд╣рдо рдЕрднреА рднреА GUID рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдмрд╛рдХреА рдХреЗ рд╕рд╛рде рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛ред - рдЯрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШреЛрд╖рд┐рдд рдЙрдкрдирд╛рдо рдкреНрд░рдХрд╛рд░ (рдпрд╛рдиреА DWORDs рдХреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░, рдЖрджрд┐): рдЬреИрд╕рд╛ рд╣реИ рд╡реИрд╕рд╛ рд╣реА рдХреЙрдкреА рдХрд░реЗрдВред
- рдЗрдВрдЯрд░рдлреЗрд╕ : рдЪреВрдВрдХрд┐ рд╕реА рдпрд╛ рд╕реА ++, рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреНрдпрд╛рджрд╛рддрд░ рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рджреЛ рддрд░рд╣ рд╕реЗ рд╕рд╢рд░реНрдд рд╕рдВрдХрд▓рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╕реА ++ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ __declspec (uuid (x)) рдХреЗ рд╕рд╛рде рдПрдХ рд░реВрдк рдореЗрдВ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдПред C. рд╣рдо C ++ рдХреЗ рд▓рд┐рдП рдШреЛрд╖рдгрд╛рдУрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рд╡реЗ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:
MIDL_INTERFACE("0c733a30-2a1c-11ce-ade5-00aa0044773d") ISequentialStream : public IUnknown { public: virtual HRESULT STDMETHODCALLTYPE Read( _Out_writes_bytes_to_(cb, *pcbRead) void *pv, _In_ ULONG cb, _Out_opt_ ULONG *pcbRead) = 0; virtual HRESULT STDMETHODCALLTYPE Write( _In_reads_bytes_(cb) const void *pv, _In_ ULONG cb, _Out_opt_ ULONG *pcbWritten) = 0; };
рдпрд╣рд╛рдВ рд╕реЗ рд╕рдм рдХреБрдЫ рд╕рд╛рдл рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗ:
[uuid(0c733a30-2a1c-11ce-ade5-00aa0044773d)] interface ISequentialStream : IUnknown { HRESULT Read( void *pv, ULONG cb, ULONG *pcbRead); HRESULT Write( void const *pv, ULONG cb, ULONG *pcbWritten); };
рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рдЫреВ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ [рдПрдиреЛрдЯреЗрд╢рди (...)] рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ SAL рдПрдиреЛрдЯреЗрд╢рди рдЫрд┐рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рд╛рдВ, рдХрдИ рдСрдкрд░реЗрд╢рди рдЕрднреА рднреА рдХрд┐рдП рдЬрд╛рдиреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд▓реЗрдЦ рдХрд╛ рдореБрдЦреНрдп рд╕рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдФрд░ рд░рд┐рдЯрд░реНрди рдорд╛рдиреЛрдВ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рдирд╣реАрдВ рдЫреВрддреЗ рд╣реИрдВ ред рдпрд╛рдиреА рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореВрд▓ рдШреЛрд╖рдгрд╛ рдХреБрдЫ рд╣рдж рддрдХ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ, рдЗрд╕рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдФрд░ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд╕реНрддрд░ рдХреЗ рд╕рдВрдХреЗрдд рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдХреБрдЫ рд╕рд╛рдл рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╣ рд╕рдВрдХрд▓рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрджрд┐ рд╡рд╣ рд╕рдВрдХрд▓рди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рд╕рд╣реА рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ "рд╣рд╕реНрддрд╛рдХреНрд╖рд░" рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВред
- рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд : рдпрд╣рд╛рдВ рдмреИрд╕рд╛рдЦреА рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рд╣рдо рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдРрд╕реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рд╣рдо рддрд░реНрдХреЛрдВ рдХреЛ рдирд╣реАрдВ рдЫреВрдПрдВрдЧреЗ, рдФрд░ рдЗрд╕ рд╕реВрдЪрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрд╛рдХреА рдХреЛрдб рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
рдпрд╛рдиреА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣:
typedef LRESULT (CALLBACK* WNDPROC)(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
[uuid(C17B0B13-6E49-4268-B699-2D083BAE88F9) interface WNDPROC : __Delegate { LRESULT WNDPROC(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); }
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, __ рдбреЗрд▓реАрдЧреЗрдЯ рд╡рд╣ рдЦрд╛рд▓реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо рдРрд╕реЗ "рдлрдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░" рдХреЛ рд╕рд╛рдзрд╛рд░рдг рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рдЕрд▓рдЧ рдХрд░реЗрдВрдЧреЗред Uuid рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИ (рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рдХрд░рдирд╛), рдпрд╣ рдмрд╕ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рд╢реВрдиреНрдп * рд╕реЗ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рд╣реИрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рд╣рдо рдордЬрдмреВрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рд░рдЦреЗрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯрд╛рдЗрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ WNDCLASSEX рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ WNDPROC lpfnWndProc рдлрд╝реАрд▓реНрдб рдХреЛ рднреА рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЯрд╛рдЗрдк рдХреЗ рдирд╛рдо рдФрд░ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд╕реНрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рд┐рдП ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред
- Bitfields : рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрд▓рдЧ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рд░рдЦрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдБ рдореБрдЭреЗ рднреА рдЯреНрд░рд┐рдХ рдХрд░рдиреА рд╣реИред рдХрд┐рд╕реА рддрд░рд╣ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХрд┐рд╕реА рддрд░рд╣ рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдлрд╝реАрд▓реНрдб рд╣реИ рдЬрдм рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдХреБрдЫ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣:
struct DWRITE_LINE_BREAKPOINT { UINT8 breakConditionBefore : 2; UINT8 breakConditionAfter : 2; UINT8 isWhitespace : 1; UINT8 isSoftHyphen : 1; UINT8 padding : 2; };
рдЗрд╕ рддрд░рд╣ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:
typedef struct DWRITE_LINE_BREAKPOINT { [replaceable] UINT8 breakConditionBefore[2]; [replaceable] UINT8 breakConditionAfter[2]; [replaceable] UINT8 isWhitespace[1]; [replaceable] UINT8 isSoftHyphen[1]; [replaceable] UINT8 padding[2]; } DWRITE_LINE_BREAKPOINT;
рдФрд░ рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдпрджрд┐ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХреБрдЫ рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ, рддреЛ рд╕рд╛рдорд╛рдиреНрдп рдХреНрд╖реЗрддреНрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд┐рд░ рдРрд╕реА рдШреЛрд╖рдгрд╛рдПрдБ:
typedef struct TEST { int i1 : 1; int i2 : 31; float f1; } TEST;
рдЗрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛:
typedef struct TEST { struct { int i1 : 1; int i2 : 31; }; float f1; } TEST;
рд▓реЗрдХрд┐рди рдмрд┐рдЯ рдлрд╝реАрд▓реНрдб рдмрд╣реБрдд рджреБрд░реНрд▓рдн рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕рдорд░реНрдерд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реА # рдореЗрдВ рдмрд╛рдХреА рд╣реИ:
typedef struct TEST { int i; float f1; } TEST;
рджреЗрд╢реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЬрд░реВрд░рдд рдХреА рд╣рд░ рдЪреАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ IDL рдХреЛ рдЬрд╛рдирдХрд╛рд░реА рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдмреЗрд╢рдХ, рд╕реА ++ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдЧреЛрдВ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд┐рдВрдбреЛрдЬ рдПрдкреАрдЖрдИ рд╕реЗ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд▓рдЧрднрдЧ рдкрдЪрд╣рддреНрддрд░ рдкреНрд░рддрд┐рд╢рдд рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрдИ рдЧрдВрджреЗ рд╣реИрдХ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, IDL рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ рдЕрднреА рднреА рдЖрд╕рд╛рди, рддреЗрдЬ рдФрд░ CLI рдкрд░ рд░реИрдкрд░ рд▓рд┐рдЦрдиреЗ рдпрд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ .NET рдореЗрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред
C # рдореЗрдВ рд╡рд┐рдЬреНрдЮрд╛рдкрди
рдЕрдм рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рд╕рдм C # рдореЗрдВ рдХреИрд╕реЗ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╣рдо рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдЬрдирд░реЗрдЯ рдХрд░реЗрдВрдЧреЗред рдкрд╣рд▓рд╛, рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреА рд╕рдЦреНрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рджреВрд╕рд░рд╛, рдорд╛рд░реНрд╢рд▓ рдХреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХреЛ рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдкрд░рдлреЙрд░рдореЗрдВрд╕ рдкрд░ рдлрд╝реНрд▓реЗрд╕ рдкрдХрдбрд╝рдиреЗ рдХреА рд╡рдЬрд╣ рд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдирд╕реНрд▓реАрдп-рд╕рд╣реА рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде, рдХреЛрдб рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╕рд░рд▓ рд╣реИред рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЕрдиреНрдпрдерд╛ рд╕рд╕реНрдкреИрдВрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рд╡реЗ рдЯрди рдХреЗ рдХреЛрдб рд╣реЛрдВрдЧреЗред рдореИрдВрдиреЗ рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдПрдХ
рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рддрд░реАрдХрд╛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬреЛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдирд╛ рдЖрдкрдХреЗ рдЕрдкрдиреЗ рдкрд╣рд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдЫрдбрд╝реА рд╣реИ - рдХреЛрдб рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдВрддрд░ рддрдм рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрд░рдЪрдирд╛ рдпрд╛ рдХрд┐рд╕реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рдХрд┐рд╕реА рдкреБрдирд░рд╛рд╡рд░реНрддреА рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдФрд░ рдЕрдЧрд░ рдорд╛рдирд╡рд░рд╣рд┐рдд рдХреЛрдб рдореЗрдВ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рджреВрд╕рд░реЗ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдпреЗ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рдореЗрдВ рдореВрд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ ... рддреЛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрд╕реНрдЯрдо рдорд╛рд░реНрд╢рд▓рд┐рдВрдЧ рднреА рдмрд╣реБрдд рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╣рд╛рдВ, рдФрд░ рд╡реИрд╕реЗ, рдорд╛рд░реНрд╢рд▓реЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
рдЖрдпрд╛рддрд┐рдд рдШреЛрд╖рдгрд╛рдУрдВ рдХрд╛
рдЙрдкрдпреЛрдЧ рд╕реА рдореЗрдВ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрд░реАрдм рд╣реЛрдЧрд╛ , рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рддреБрд░рдВрдд рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ C # рдореЗрдВ рдПрдХ рдЪрд░ рдХрд╛ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ
рдзреБрдВрдзрд▓рд╛ рдкреНрд░рдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реА рд╕рднреА рд╕рдВрд░рдЪрдирд╛рдПрдВ рдЗрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВрдЧреАред рд╣рдо рдПрд░реЛ рдХреЗ рд╕рд╛рде рдЦреЗрддреЛрдВ рдХреЛ рддрдп рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рддрд╛рд░ рдХреЗ рд▓рд┐рдП рдЪрд╛рд░ * / рдмрд╛рдЗрдЯ * рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдмреВрд▓ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдХреНрд╖рд╛рд▓рд┐рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЗрдВрдЯ рдлреАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдСрдкрд░реЗрдЯрд░реНрд╕ рдХреЛ / рд╕реЗ рдмреВрд▓ рддрдХ рдбрд╛рд▓реА рдЬрд╛рдПрдЧреАред рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдЕрдВрджрд░ рдХреА рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рд╕реАрдорд╛рдПрдБ рд╣реИрдВ: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рд╢реНрдЪрд┐рдд рдХреАрд╡рд░реНрдб рдХреЗрд╡рд▓ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдХреЗрд╡рд▓ рдПрдХ рдЖрдпрд╛рдореА рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рдпрдорд┐рдд рд╕рд░рдгрд┐рдпреЛрдВ (рдорд╛рд░реНрд╢рд▓реЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдФрд░ SizeConst рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде) рдореЗрдВ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдПрдХ рдкреНрд░рдХреНрд╖рд╛рд▓рд┐рдд рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡реЗ рдХреЗрд╡рд▓ рдПрдХ-рдЖрдпрд╛рдореА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдо рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдПрдВрдЧреЗред рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╕рдВрдкрддреНрддрд┐ рд╣реЛрдЧреА, рд╕рд╛рде рд╣реА / рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рдирдХрд▓ рдХреЗ рд▓рд┐рдП рдирд┐рд╣рд┐рдд рдСрдкрд░реЗрдЯрд░ рднреА рд╣реЛрдВрдЧреЗред рдХрдИ рдЗрдВрдбреЗрдХреНрд╕ рдкрд░ рдкрд╣реБрдВрдЪ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЫрджреНрдо рдЖрдпрд╛рдо рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╛рдиреА 4x4 рдореИрдЯреНрд░рд┐рдХреНрд╕ 16 рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реЛрдЧреА, рдФрд░ рдЗрдВрдбреЗрдХреНрд╕рд░ рд╕рдВрдкрддреНрддрд┐ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХрд╛ рдкрддрд╛ рд▓реЗрдЧреА рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдлрд╝рд╕реЗрдЯ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдЧреА: index1 * length1 + index2, рдЬрд╣рд╛рдВ length1 4 рд╣реИ, рдФрд░ рджреЛрдиреЛрдВ рд╕реВрдЪрдХрд╛рдВрдХ 0 рд╕реЗ 3 рддрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИрдВред
- рд╕рдВрд░рдЪрдирд╛рдУрдВ рдФрд░ рд╕рдВрдШреЛрдВ: рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд░рдЪрдирд╛рдПрдВ, рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВред рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдпрдиреЛрдВ LayoutKind.Explicit рдФрд░ FieldOffset (0) рдХреЗ рд▓рд┐рдПред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдиреЛрдЯ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдФрд░ рд╕рдВрдШреЛрдВ рдХреЗ рд╕рд╛рде рдирд╛рдорд╣реАрди рдХреНрд╖реЗрддреНрд░ рд╣реИрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЙрдиреНрд╣реЗрдВ __MIDL__ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЙрддреНрдкрдиреНрди рдирд╛рдо рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
рд╕рдВрд░рдЪрдирд╛
typedef struct TEST { struct { int i; }; } TEST;
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
typedef struct TEST { struct __MIDL___MIDL_itf_Win32_0001_0001_0001 { int i; } __MIDL____MIDL_itf_Win32_0001_00010000; } TEST;
рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ рдЖрдк рдЗрд╕реЗ C # рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд┐рд▓реЗрдВрдЧреЗ:
[StructLayout(LayoutKind.Sequential)] public unsafe struct TEST { [StructLayout(LayoutKind.Sequential)] public unsafe struct __MIDL___MIDL_itf_Win32_0001_0001_0001 { public int i; } public __MIDL___MIDL_itf_Win32_0001_0001_0001 __MIDL____MIDL_itf_Win32_0001_00010000; }
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЗрд╕рдХреЗ рд╕рд╛рде рдирд░рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рд╕реА рдореЗрдВ рдлрд╝реАрд▓реНрдб i рдХреА рдкрд╣реБрдВрдЪ рд╕реАрдзреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдореБрдЦреНрдп рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИ, рдЕрд░реНрдерд╛рддред myVar.i, рдФрд░ рдпрд╣рд╛рдБ рдбрд░рд╛рд╡рдирд╛ myVar рд╣реЛрдЧрд╛ред __MIDL ____ MIDL_itf_Win32_0001_00010000.iред рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдо рдиреЗрд╕реНрдЯреЗрдб рдЕрдирд╛рдо рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рддрдХ рд╕реАрдзреЗ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЧреБрдг рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public unsafe struct TEST { [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public unsafe struct __MIDL___MIDL_itf_Win32_0001_0001_0001 { public int i; } public __MIDL___MIDL_itf_Win32_0001_0001_0001 __MIDL____MIDL_itf_Win32_0001_00010000; public int i { get { return __MIDL____MIDL_itf_Win32_0001_00010000.i; } set { __MIDL____MIDL_itf_Win32_0001_00010000.i = value; } } }
рд╢рд╛рдпрдж рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрдорд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЛ рдЕрдзрд┐рдХрддрдо рд╡рд┐рдЬреНрдЮрд╛рдкрди рдкрддреНрд░рд╛рдЪрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
typedef struct TEST { union { struct { int i1; int i2; }; struct { float f1; float f2; }; }; char c1; } TEST;
рдЧреБрдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рдЖрдкрдХреЛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдПрдХрдорд╛рддреНрд░ рдЕрдкрд╡рд╛рдж рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдиреЗрд╕реНрдЯреЗрдб рдлрд╝реАрд▓реНрдб рдХрд╛ рдкрддрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЕрднреА рднреА рдкреВрд░реНрдг рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
- рд▓рд┐рд╕реНрдЯрд┐рдВрдЧред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдХреЗрд╡рд▓ рдорд╛рдореВрд▓реА рдЕрдВрддрд░ рд╣реИред
- рдмрд┐рдЯ рдХреНрд╖реЗрддреНрд░ред рд╡реЗ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдВрдЧреЗ - рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдирд┐рдЬреА рдЪрд░ (рдкреНрд░рдХрд╛рд░ рдмрд┐рдЯ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХреБрд▓ рдЖрдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ) рдФрд░ рдЙрддреНрдкрдиреНрди рдЧреБрдг рдЬреЛ рдХреЗрд╡рд▓ рд╕рдВрдмрдВрдзрд┐рдд рдмрд┐рдЯреНрд╕ рдХреЛ рдкрдврд╝рдиреЗ / рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рдЯ рд╕рдВрдЪрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 1)] public unsafe struct DWRITE_LINE_BREAKPOINT { private byte __bit_field_value; public byte breakConditionBefore { get { return (byte)((__bit_field_value >> 8) & 3); } set { __bit_field_value = (byte)((value & 3) << 8); } } public byte breakConditionAfter { get { return (byte)((__bit_field_value >> 8) & 3); } set { __bit_field_value = (byte)((value & 3) << 8); } } ... }
- рдбреАрдПрд▓рдПрд▓ рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреА рдШреЛрд╖рдгрд╛: рдореВрд▓ рд░реВрдк рд╕реЗ, рдиреЗрдЯрд┐рд╡рдореЗрдереЛрдбреНрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдбреАрдПрд▓рдЖрдИрдПрдордкреЛрд░реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рд░ рдмрд╛рд╣рд░реА рддрд░реАрдХреЗ
- рдЯрд╛рдЗрдкрд┐рдпрд╛рдл рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШреЛрд╖рд┐рдд рдЙрдкрдирд╛рдо рдкреНрд░рдХрд╛рд░: рдпрджрд┐ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЧрд▓рддреА рд╕реЗ рдЖрдИрдбреАрдПрд▓ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛, рддреЛ рдЯрд╛рдЗрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЙрдкрдирд╛рдо рд╕реНрд╡рдпрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ( рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ)ред рдФрд░ рдЕрдЧрд░ рд╡реЗ рд╕рднреА рд╡рд╣рд╛рдВ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реНрдерд╛рдирд╛рдкрдиреНрди рдХрд░реЗрдВ рдЬреЛ рд╡реЗ рдЙрдирдХреЗ рдмрдЬрд╛рдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред
- рд╕реНрдерд┐рд░рд╛рдВрдХ: рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рд╡рд░реНрдЧ рдореЗрдВ рд╕реНрдерд┐рд░рд╛рдВрдХред рд░реЗрдЦрд╛рдПрдБ рдпрд╛ рд╕рдВрдЦреНрдпрд╛рдПрдБред
- рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд (рдЬреЛ рд╡рд┐рд╢реЗрд╖ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИрдВ): рд╣рдо 2 рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ: рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдФрд░ рдПрдХ рд╕рдВрд░рдЪрдирд╛, рдЬреЛ рд╕реНрд╡рдпрдВ рд╕реВрдЪрдХ рд╣реЛрдЧреАред рдкреНрд░рдХрд╛рд░ рд╢реВрдиреНрдп рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░ рд╣реИ *ред рдФрд░ рдирд┐рд╣рд┐рдд рд╕рдВрдЪрд╛рд▓рдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдорд╛рд░реНрд╢рд▓ рд╕реЗ рдХреЙрд▓ рдХрд░рдХреЗ / рд╕реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП редGetFunctionPointerForDelegate рдФрд░ Mars.GetDelegateForFunctionPointer
- рдЗрдВрдЯрд░рдлреЗрд╕: рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд▓рдЧ рд░рд╣рд╛ рдерд╛ - ComImport рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдмрд╛рдд рдЯреЛрдкреА рдореЗрдВ рд╣реИ, рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рдереЛрдХ рддрд░реАрдХреЛрдВ рдореЗрдВ рдорд╛рд░реНрд╢рд▓ рд╡рд░реНрдЧ рдореЗрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдирд╣реАрдВ, рдпрд╣ рдХреЗрд╡рд▓ COM рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╡реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдХреБрдЫ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ IUnogn рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП IXAudio2Voiceред рдФрд░ рдпрд╣рд╛рдВ рдорд╛рдирдХ .NET рддрдВрддреНрд░ рдЖрдкрдХреЛ "рдХреНрд╡реИрдХ" рдмрддрд╛рдПрдЧрд╛ред рдЦреИрд░, рдпрд╣ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рд╕реНрдЯреЙрдХ рдореЗрдВ рдПрдХ рдкреЗрдЪреАрджрд╛ рдирд╛рдЗрдЯ рдЪрд╛рд▓ рд╣реИ - рд╣рдо рдЦреБрдж рд╡рд░реНрдЪреБрдЕрд▓ рд╡рд┐рдзрд┐ рдЯреЗрдмрд▓ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдорд╛рд░реНрд╢рд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗред рдпрд╣рд╛рдВ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рд╣реИ - рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдирд┐рдЬреА рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП, рдореБрдЦреНрдп рд╕рдВрд░рдЪрдирд╛ рдПрдХ рд╡рд┐рдзрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИ рдЬреЛ рдорд╛рд░реНрд╢рд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИред GetDelegateForFunctionPointerред рд╕рд╛рде рд╣реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╣рд┐рдд рдмрдпрд╛рдиреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯред рдЗрд╕реЗ рдпрд╣рд╛рдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЧрд╣ рд▓реЗ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд╕рдВрд▓рдЧреНрди рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд░реВрдкрд╛рдВрддрд░рдг рдЙрдкрдпреЛрдЧрд┐рддрд╛
рдпрд╣ рд╕рдм рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рд╕рд╛рде рд╣реИред рдЕрднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
рд╡рд┐рдВрдбреЛрдЬ рдПрд╕рдбреАрдХреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдорд┐рдбрд▓ рдХрдВрдкрд╛рдЗрд▓рд░ рдЖрдИрдбреАрдПрд▓ рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ред
C # рдореЗрдВ рдЯрд╛рдЗрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдХреЛ рдЕрдкрдиреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реЗ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рд╕реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рднреА рдЪрд▓рд╛рдПрдВрдЧреЗ)ред
рдореИрдВ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реВрдБрдЧрд╛ред ITypeLib2 рдФрд░ ITypeInfo2 рдХреЗ рдорд╛рдирдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯрд╛рдЗрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рд▓реЗрдЦрди рдХреЛ
рдпрд╣рд╛рдБ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред рд╡реЗ tlbimp рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдореЗрдВ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдХрдирд╡рд░реНрдЯрд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред рд╕реНрд░реЛрдд рдХреЛрдб рд╕рдВрд▓рдЧреНрди рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╣реИ (рдФрд░ рд╣рд╛рдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ C # рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдмрд┐рдирд╛ рдпрд╣ рдЖрд╕рд╛рди рд╣реИ)ред
рдЕрдм IDL рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред
рдХрдВрдкрд╛рдЗрд▓рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рд╡рд┐рдВрдбреЛрдЬ 8.1 рдПрд╕рдбреАрдХреЗ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕реА: \ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлрд╛рдЗрд▓реНрд╕ (x86) \ blablab рдЬреИрд╕реЗ рдХрд╣реАрдВ рднреА рдкреВрд░реНрдг рдкрде рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛ рд╣реИред
рдирд┐рдореНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
C: \ Program Files (x86) \ Microsoft рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 12.0 \ VC \ bin \ amd64 \ 1033 \ clui.dll
C: \ Program Files (x86) \ Microsoft рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ 12.0 \ VC \ bin \ amd64 \ c1.dll
C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ bin \ amd64 \ cl.exe
C: \ Program Files (x86) \ Microsoft рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 12.0 \ VC \ bin \ amd64 \ mspdb120.dll
C: \ Program Files (x86) \ Windows Kits \ 8.1 \ bin \ x64 \ midl.exe
C: \ Program Files (x86) \ Windows Kits \ 8.1 \ bin \ x64 \ midlc.exe
рд╣рдо рдПрдХ рдвреЗрд░ рдореЗрдВ clui.dll рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ рдбрдВрдк рдХрд░рддреЗ рд╣реИрдВред рдФрд░ clui.dll 1033 рдХреЗ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
Midl.exe рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддреА рд╣реИ - midlc.exe, рдЬреЛ рд╕рднреА рдХрд╛рдо рдХрд░рддреА рд╣реИред
рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдУрдИрдбрд▓.рдЖрдИрдбреАрдПрд▓ рдирд╛рдо рдХреА рдПрдХ рдлрд╛рдЗрд▓ рдХреА рдореМрдЬреВрджрдЧреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдкрд╣реБрдВрдЪ рдХреЗ рднреАрддрд░ IUnogn рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреНрд╡рд╛рд░рд╛ рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рд╣реИред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдореВрд▓ oaidl.idl рд╕реЗ рдореБрдЦреНрдп рдШреЛрд╖рдгрд╛рдУрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ рдФрд░ рдЬрд┐рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдпрд╣ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджреНрдпрдкрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдХреЗрд╡рд▓ IUnogn рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреНрдп рд╡рд┐рдЬреНрдЮрд╛рдкрди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрдХрд▓рд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдХрд▓рдХ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд░рдЦреЗрдВред
рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдереЛрдбрд╝рд╛ рдареАрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ BOOL рдФрд░ BOOLEAN рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддрд╛рдХрд┐ рдЗрдВрдЯ рдФрд░ рдмрд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рди рд╣реЛ, рд▓реЗрдХрд┐рди рдмреВрд▓ рдХреЛ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдЬреЛ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рдкреНрд░рдХреНрд╖рд╛рд▓рд┐рдд рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕рдВрдХрд▓рдХ рдореЗрдВ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдлрд┐рдХреНрд╕рд┐рдВрдЧ рдХрдВрдкрд╛рдЗрд▓рд░ рдкреНрд░рддрд┐рдмрдВрдз
рдЯрд╛рд░ рдХрд╛ рдмреИрд░рд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдереА:
http://support.microsoft.com/default.aspx?scid=kb=en-us-220137 ; Microsoft рдЗрд╕реЗ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рди рджреЗ рд░рд╣рд╛ рд╣реИред рдПрдХ рддрд░рдл, рдпрд╣ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ - рдкреНрд░рдХрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп OLE рд╕реНрд╡рдЪрд╛рд▓рди рд╣реИ, рдЬреЛ рдХреЗрд╕-рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХрд╛ рдЕрд░реНрде рд╣реИред рджреВрд╕рд░реА рдУрд░, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╣рд▓реНрдХреЗ рдврдВрдЧ рд╕реЗ рд░рдЦрд╛ рдЬрд╛рдП, рдпрд╣ рдЕрдЬреАрдм рд╣реИ - рддрд░реНрдХреЛрдВ рдХреЗ рдирд╛рдо рдФрд░ рддрд░реАрдХреЛрдВ рдпрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рдмреАрдЪ рдХреЛрдИ рд╕рдВрдмрдВрдз рдирд╣реАрдВ рд╣реИ, рдЯрд╛рдЗрдк рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп рддрд╛рд░ рдХреА рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реВрдЪреА рдЗрддреНрдпрд╛рджрд┐? рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ "рдбрд┐рдЬрд╛рдЗрди рджреНрд╡рд╛рд░рд╛" рд╣рдореЗрдВ рд╢реЛрднрд╛ рдирд╣реАрдВ рджреЗрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рдгрд╛рдо рдирд╛рдореЛрдВ рдореЗрдВ рдПрдХ рд░рд╛рдХреНрд╖рд╕реА рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ) рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдВрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЙрди рдирд╛рдореЛрдВ рдХреЗ рд╕рдЯреАрдХ рдорд┐рд▓рд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдХреЗрд╕-рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛ рдЖрдорддреМрд░ рдкрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдмрд╕реЗ рдХреБрдЦреНрдпрд╛рдд рднрд╛рд░рддреАрдп рд╣реИрдВ рдЬреЛ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЦрд░реЛрдВрдЪ рд╕реЗ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдПрдкреАрдЖрдИ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдбреАрдмрдЧрд░ рдХреЗ рд╕рд╛рде рд╕рд╢рд╕реНрддреНрд░, рд╣рдо KB220137 рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкреБрд╖реНрдЯрд┐ рдХрд░рддреЗ рд╣реИрдВ:
рд╕рдВрдХрд▓рдХ рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╢рдмреНрджрдХреЛрд╢ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИрдВред рдпрджрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ "рд╕рдВрджреЗрд╢" рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ рдкрдХрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ), рддреЛ рдЗрд╕реЗ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ "рдПрдордПрд╕рдЬреА" рд▓рд╛рдЗрди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдирд╛рдо) рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рддреЛ рдЗрд╕ рд▓рд╛рдЗрди рдХреА рддреБрд▓рдирд╛ рдбрд┐рдХреНрд╕реНрдЯреНрд░реИрд╕реНрдЯреНрд░рд┐рдВрдЧрд╛ рдФрд░ NORM_IGNORECASE рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдХреА рдЬрд╛рдПрдЧреАред рдЪреЗрдХ рдЗрд╕ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд▓реМрдЯрд╛рдПрдЧрд╛ рдХрд┐ рд▓рд╛рдЗрдиреЗрдВ рд╕рдорд╛рди рд╣реИрдВ, рдкрд╛рда "Msg" рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕рдВрдХрд▓рдХ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЯрд╛рдЗрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ "msg" рд▓рд┐рдЦреЗрдВрдЧреЗ (рджреЛрдиреЛрдВ рддрд░реНрдХ рдирд╛рдо рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдирд╛рдо), рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЬреБрдбрд╝реЗ рдирд╣реАрдВ рд╣реИрдВред рдпрд╣ рддрд░реНрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, oleaut32.dll (ICreateTypeLib, ICreateTypeInfo, рдЖрджрд┐) рд╕реЗ COM рдСрдмреНрдЬреЗрдХреНрдЯ, рдЬреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд╛рдореЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ComparStringA рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди ICreateTypeInfo :: SetVarName рдЙрд╕ рдкрд░рд┐рдгрд╛рдо рдХреЛ TYPE_E_AMBIGUOUSNAME рд▓реМрдЯрд╛рдПрдЧрд╛ рдЬрдм рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдХреЗрд╡рд▓ рдореМрдЬреВрджрд╛ рдорд╛рдорд▓реЗ рд╕реЗ рдЕрд▓рдЧ рд╣реИред рдпрджреНрдпрдкрд┐ рд╡рд╣рд╛рдБ рдХреЛрдИ рд╡реИрд╢реНрд╡рд┐рдХ рд╢рдмреНрджрдХреЛрд╢ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪреЗрдХ рдХреЗрд╡рд▓ рдЙрди рдлрд╝реАрд▓реНрдбреНрд╕ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдКрдкрд░ рд╕реЗ, рдХрд╛рд░реНрдп рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ - рддреБрд▓рдирд╛рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЙрд▓ рдХреЛ рд░реЛрдХрдирд╛ рдФрд░ dwCmpFlags рддрд░реНрдХ рд╕реЗ NORM_IGNORECASE рдзреНрд╡рдЬ рдХреЛ рд╣рдЯрд╛рдирд╛редMidlc.exe, рдХрд░реНрдиреЗрд▓ 32.dll рд╕реЗ рддреБрд▓рдирд╛StringA рдХреЛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ karbase.dll рд╕реЗ ComparStringA рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ oleaut32.dll рддреБрд░рдВрдд рдХрд░реНрдиреЗрд▓рдмреЗрд╕.dll рд╕реЗ ComparStringA рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░реЗрдВрдЧреЗредрдпрд╣ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХ рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЖрдкрдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЕрдкрдирд╛ рдХреЛрдб рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░, рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: http://www.codeproject.com/Articles/44326/MinHook-The-Mimalimalistic-x86-x64-API-Hooking-Libra (рд╕рдВрд▓рдЧреНрди рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИ - рдХреЛрдб рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рднрд╛рд╖рд╛ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗ рд╕рд╛рдл)редрдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ DLL рдмрдирд╛рдПрдВ рдФрд░ midlc.exe рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдпрд╛рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рд▓реЛрдб рдХрд░реЗред рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХреЛ DllMain рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдкрд░ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛редрдЖрдк рдЖрдпрд╛рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддреИрдпрд╛рд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ http://www.ntcore.com/exsuite.php ред рд╕реАрдПрдлрдПрдл рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдореЗрдВ, рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП exe рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓рдиреЗ рдФрд░ рдмрд╛рдИрдВ рдУрд░ рдЖрдпрд╛рддрдХрд░реНрддрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИредрдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
рдмреЗрдХрд╛рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдмрд╛рдИрдВ рдмрд┐рд▓реНрдб-рдИрд╡реЗрдВрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рд╕рд┐рджреНрдз T4 рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реЗ рдЯреЗрдХреНрд╕реНрдЯ рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЯреВрд▓ рд╣реИред рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╕рдордп рдХреЗрд╡рд▓ рдордирдорд╛рдиреА C # рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЖрдИрдбреАрдПрд▓ рдлрд╛рдЗрд▓ рд╣реА рд╣реЛрдЧреАред рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ рдХрд┐ T4 рджреНрд╡рд╛рд░рд╛ рдкрд╣рдЪрд╛рдиреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмреНрд▓реЙрдХ рдХреЛ IDL рдлрд╝рд╛рдЗрд▓ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕реЗ midl рджреНрд╡рд╛рд░рд╛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕ рдмреНрд▓реЙрдХ рдХреЗ рдмрд╛рд╣рд░ рдХреА рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЛ T4 рджреНрд╡рд╛рд░рд╛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХреЛрдб рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдкреВрд░реА рд▓реЙрдиреНрдЪрд┐рдВрдЧ рдХреЛ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдФрд░ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рд╛рдЭрд╛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛, рдХреЗрд╡рд▓ рд╢рд╛рдорд┐рд▓ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдЫреЛрдбрд╝рдирд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдкреНрд░рддреНрдпреЗрдХ IDL рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд╣реЛрдЧреА
рдФрд░ IDL рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЧреБрдгреЛрдВ рдореЗрдВ, TextTemplatingFileGenerator рдХреЛ рдХрд╕реНрдЯрдо рдЯреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВредрд╢рд╛рдорд┐рд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ - рд╣рдорд╛рд░реА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдмрд╕ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд░рддреА рд╣реИред рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рдорд╛рд░реА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╕реА # рдХреЛрдб рдЯреА 4 рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ T4 рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реЗрдЦрд╛ рджреЗрддрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдореА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЗрд╡рд▓ рдпрд╣ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХрднреА рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВ рдЖрдПрдЧреА рдФрд░ рдордирдорд╛рдиреА рд╣реЛ рд╕рдХрддреА рд╣реИ редрдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж .id рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреАрдврд╝реА рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧреА рдФрд░ рдХреЛрдб рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛редрдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЯреА 4 рдореЗрдВ рдкрд╛рда рдХреЗ рдирд┐рд░рдВрддрд░ рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рдЖрдХрд╛рд░ (рдЕрдлрд╡рд╛рд╣ ~ 64kb) рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рддреНрд░реБрдЯрд┐ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ "рд╕рдВрдХрд▓рди рдмрджрд▓рдирд╛: рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд▓рдВрдмрд╛ рдпрд╛ рдЬрдЯрд┐рд▓ рд╣реИ"ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдкрдХреЛ рд╕рдордп-рд╕рдордп рдкрд░ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП:
рд╕реЗрдЯрд┐рдВрдЧреНрд╕
рд╣рдорд╛рд░реЗ рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рдЦреАрдВрдЪ рд▓реЗрдВрдЧреЗ, рдЬреЛ рдХрд┐ рд╕рдВрднрд╡рддрдпрд╛ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдЖрдИрдбреАрдПрд▓ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ IUnaware рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдШреЛрд╖рдгрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдРрд╕реЗ рдирд╛рдорд╕реНрдерд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдХрд╣реАрдВ рдЭреВрда рдмреЛрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЛ рднреА рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВред рдХреЛрдб рдкреАрдврд╝реА рдХреЗ рджреМрд░рд╛рди рдЬрд┐рди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдирд╛рдорд╕реНрдерд╛рди рдХреА рд╕реВрдЪреА рдХреЛ рдЖрдИрдбреАрдПрд▓ рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд░реВрдкрд╛рдВрддрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрдкрд░реАрдХреНрд╖рдг
рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреАрдЬреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗ:- рдирд┐рд░реНрджрд┐рд╖реНрдЯ DLL рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐
- рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЖрдпрд╛рдо
- рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдСрдлрд╕реЗрдЯ
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреВрдВрдХрд┐ рд╡рд░реНрдгрд┐рдд рд╕рдорд╛рдзрд╛рди рдУрдПрд╕ рдмрд┐рдЯ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдмрдВрдзрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП 32-рдмрд┐рдЯ рдФрд░ 64-рдмрд┐рдЯ рджреЛрдиреЛрдВ рдореЛрдб рдореЗрдВ рд╕рдм рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛редрдЖрдк рдЧрдгрдирд╛ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди 99% рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡реЗ 4 рдмрд╛рдЗрдЯ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЗрдВрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрджреЗрд╢реА рдХреЛрдб рд╕реЗ рдЖрдХрд╛рд░ рдФрд░ рдСрдлрд╕реЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, CLI (32 рдФрд░ 64) рдкрд░ рджреЛ рдЕрд╕реЗрдВрдмрд▓реА рдмрдирд╛рдПрдВред рдЙрдкрдпреЛрдЧрд┐рддрд╛ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдкреНрд░рдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд╢реБрд░реБрдЖрддреА рдХреЗ рд╕рд╛рде рдореИрдХреНрд░реЛрдЬрд╝ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ: #define STRUCT_SIZES \ {\ { L"ARRAYDESC", sizeof(::ARRAYDESC) },\ { L"BLOB", sizeof(::BLOB) },\ { NULL, 0 }\ }\ #define STRUCT_OFFSETS \ {\ { L"ARRAYDESC.tdescElem", FIELD_OFFSET(::ARRAYDESC, tdescElem) },\ { L"ARRAYDESC.tdescElem.lptdesc", FIELD_OFFSET(::ARRAYDESC, tdescElem.lptdesc) },\ { NULL, 0 }\ }\
рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП: STRUCT_SIZE structSizes[] = STRUCT_SIZES; STRUCT_OFFSET structOffsets[] = STRUCT_OFFSETS;
рд╕рдВрдХрд▓рдХ рдкреИрдЪ рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рдЪрд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ!рдПрдХ рд▓реВрдк рдореЗрдВ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдкрд░, рд╣рдо рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╢рдмреНрджрдХреЛрд╢ <string> int> рдореЗрдВ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреБрдВрдЬреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдирд╛рдо рдФрд░ рдЙрд╕рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдореВрд▓реНрдп рд╣реЛрдЧрд╛ред рджреВрд╕рд░реЗ рдореЗрдВ, рдХреБрдВрдЬреА рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП 'рдкреВрд░реНрдг рдкрде' рдХреА рддрд░рд╣ рдХреБрдЫ рд╣реИ, рдФрд░ рдореВрд▓реНрдп рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХреА рдСрдлрд╕реЗрдЯ рд╣реИредрдбреЗрдЯрд╛ 32 рдФрд░ 64 рдмрд┐рдЯ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдЧрд╛, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдореЗрдВ рджреЛ рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдбреЗрдЯрд╛ C # рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрдХреНрд╖рд╛рдУрдВ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рдкрд░реАрдХреНрд╖рдг рдЗрди рдЖрдХрд╛рд░реЛрдВ рдФрд░ рдСрдлрд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдорд╛рд░реНрд╢рд▓ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдордХрдХреНрд╖реЛрдВ рдХреЗ рд╕рд╛рде рдХрд░реЗрдЧрд╛редрд╣рдо LoadLibrary рдФрд░ GetProcAddress рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ dll рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд╣реИ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдРрд╕рд╛ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ рдпрд╛ рдЖрдИрдбреАрдПрд▓ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рдЧрдбрд╝рдмрдбрд╝ рд╣реИредрдЗрд╕ рдкреНрд░рдХрд╛рд░, рдирдП рд╡рд┐рдЬреНрдЮрд╛рдкрди рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИред рдареАрдХ рд╣реИ, рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдХрднреА-рдХрднреА рдХреЗрд╡рд▓ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде #include рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рд╕реНрд░реЛрдд рд╕рдВрд░рдЪрдирд╛рдПрдВ рдШреЛрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рддрд╛рдХрд┐ рдкрд░реАрдХреНрд╖рдг рд╕рдВрдХрд▓рд┐рдд рд╣реЛредрд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ - VisualStudio 32-рдмрд┐рдЯ рдФрд░ 64-рдмрд┐рдЯ рджреЛрдиреЛрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рде рдЦреЛрдЬ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╛ рддреЛ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рд╕реЗред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдкрд░реАрдХреНрд╖рдг рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рддрд░реНрдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрдХреНрд╖рд╛рдПрдВ рд╕реНрд╡рдпрдВ рд╣реА рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдПрдВрдЧреАредрдЯреЗрд╕реНрдЯ рдХрднреА-рдХрднреА рдХрд┐рд╕реА рднреА рдордВрдЪ рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рдВрд░реЗрдЦрдг рдореЗрдВ рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рдХрдЯ рдХрд░реЗрдВрдЧреЗред рдЪреВрдБрдХрд┐ рд╣рдо рдлреАрд▓реНрдбрдСрдлрд╝рд╕реЗрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдпрд╛ рд╕рдВрдЧрддрддрд╛ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рдиреЙрдирдЬрд╝реЗрд░реЛ рдлрд╝реАрд▓реНрдб рдСрдлрд╝рд╕реЗрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рджреЛрдиреЛрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдВрдЧреЗ), рд╣рдореЗрдВ рд░рд╛рд╕рд╛рдпрдирд┐рдХ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
typedef struct SOCKET_ADDRESS_LIST { INT iAddressCount; SOCKET_ADDRESS Address[1]; } SOCKET_ADDRESS_LIST;
X64 рдореЗрдВ, рдкрддрд╛ рд╕рд░рдгреА рдореЗрдВ 8 рдХрд╛ рдСрдлрд╕реЗрдЯ рд╣реЛрдЧрд╛, рдЕрд░реНрдерд╛рдд iAddressCount рдлрд╝реАрд▓реНрдб рдХреЗ рдмрд╛рдж, 4 рдмрд╛рдЗрдЯреНрд╕ рдХреА рдкреИрдбрд┐рдВрдЧ рдЖрд╡рд╢реНрдпрдХ рд╣реИред X86 рдкрд░ рдпрд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред .NET рдореЗрдВ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рджреЛрдиреЛрдВ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ 4 рдмрд╛рдЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдШреЛрдбрд╝реЗ рдХреА рдореБрд╢реНрдХрд┐рд▓ рдЪрд╛рд▓ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: typedef struct SOCKET_ADDRESS_LIST { union { INT iAddressCount; [hidden] void* ___padding000; }; SOCKET_ADDRESS Address[1]; } SOCKET_ADDRESS_LIST;
рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╕рдВрд░рдЪрдирд╛ рд╕рдорддреБрд▓реНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЙрддреНрдкрдиреНрди .NET рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝реЗрдЧрд╛ - рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдб 32-рдмрд┐рдЯ рдореЛрдб рдореЗрдВ 4 рдмрд╛рдЗрдЯреНрд╕ рдФрд░ 64-рдмрд┐рдЯ рдореЛрдб рдореЗрдВ 8 рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рд╕реНрдерд╛рди рд▓реЗрдЧреА, рдЬрд┐рд╕рд╕реЗ 4 рдмрд╛рдЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ "рд╢рд┐рдлреНрдЯрд┐рдВрдЧ" рд╕рд░рдгреА рд╣реЛрдЧреАред рдХреЗрд╡рд▓ 64-рдмрд┐рдЯ рдореЛрдб рдореЗрдВредрд╕рд╢рд░реНрдд рд╕рдВрдХрд▓рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдорд╛рдВрдд рд╕рдВрд░реЗрдЦрдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ (x86 рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд╛ #pragma рдкреИрдХ (2) рдФрд░ x64 рдХреЗ рд▓рд┐рдП #pragma рдкреИрдХ (16)) рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - 99% рд╕рдВрд░рдЪрдирд╛рдПрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╛ 1 рдмрд╛рдЗрдЯ рджреНрд╡рд╛рд░рд╛ рдЧрдардмрдВрдзрди рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдмрд╛рдХреА рд╕рдм рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИредрдХрднреА-рдХрднреА, рд╕рдВрд░рдЪрдирд╛рдПрдБ x86 рдФрд░ x64 рдкрд░ рдореВрд▓ рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП WSADATAред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рдкрдЯрд╛ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдРрд╕реА рд╕рдВрд░рдЪрдирд╛рдПрдВ рдЕрддреНрдпрдВрдд рджреБрд░реНрд▓рдн рд╣реИрдВредрд╡рд╣ рд╕рдм рд╣реИред
рд╕рдВрд▓рдЧреНрди рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╕рднреА рд╕реНрд░реЛрдд рдХреЛрдбредрдХрд┐рд╕реА рднреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╕рдордЭреМрддреЛрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдорд┐рдбрд▓ рдХрдВрдкрд╛рдЗрд▓рд░ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред рдЖрдк рдЗрд╕реЗ VisualStudio рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдкреИрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (64-рдмрд┐рдЯ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)редрд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдХреЛрдб