рдореЗрдЯрд╛ рдЯреНрд░реЗрдбрд░ рдХреЗ рд▓рд┐рдП MQL рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рд▓рдЧреЗ рдПрдХ рдХрдВрдкрдиреА рдореЗрдВ рдЖрдзреЗ рд╕рд╛рд▓ рддрдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЖрджреЗрд╢ рдЖрдпрд╛: рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ C # рдпрд╛ VB.Net рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдХрд╛рд░реНрдп рд╕реА # рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдирд╛ рдФрд░ рдЙрд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рдбреАрдПрд▓ рдХрд░рдирд╛ рдерд╛ рдЬреЛ рдПрдордХреНрдпреВрдПрд▓ рдЯреНрд░реЗрдбрд┐рдВрдЧ рд╕рд▓рд╛рд╣рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдПрдХ рдУрд░, рдпрд╣ рдореЗрд░реЗ рд▓рд╛рдн рдХреЗ рд▓рд┐рдП рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдПрдХ рд╡рд░реНрд╖ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ C # рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рджреВрд╕рд░реА рддрд░рдл, рдпрд╣ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ?

рдпрд╣ рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ C # рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрдВрдб рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдХреА рдЦреЛрдЬ рдиреЗ рдореБрдЭреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдПрдХ рд╕рдорд╛рдзрд╛рди рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рдЖрдИрдПрд▓ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп, ILDASM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ
- рдХреЛрдб рдмрджрд▓реЗрдВ рддрд╛рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░реНрдпрд╛рдд рд╣реЛ рдЬрд╛рдПрдВ
- ILASM рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдЬреБрдЯрдирд╛
рдореИрдВрдиреЗ рд╡рд╣рд╛рдВ IL рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╕реБрдирд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХрднреА рдЕрдкрдиреА рдЖрдВрдЦреЛрдВ рдореЗрдВ рдпрд╣ рдЪрдорддреНрдХрд╛рд░ рдирд╣реАрдВ рджреЗрдЦрд╛ред рддрд╛рдХрд┐ рдЖрдкрдХреЛ рд╕рд╛рд╣рд┐рддреНрдп рдХреА рддрд▓рд╛рд╢ рди рдХрд░рдиреА рдкрдбрд╝реЗ, рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рд╣рд░ рдЪреАрдЬ рдХрд╛ рдЪрд░рдг рджрд░ рдЪрд░рдг рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪрд▓рддрд╛ рд╣реИред
рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдирд┐рдпрдорд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдПрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ 2 рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реЛрдВрдЧреА, рдЬрд╣рд╛рдБ рдкрд╣рд▓рд╛ рдкрд╕рдВрджреАрджрд╛ "рд╣реИрд▓реЛ, рд╡рд░реНрд▓реНрдб!" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕реНрдХреНрд░реАрди рдкрд░ рджреВрд╕рд░рд╛ рджреЛ рдирдВрдмрд░реЛрдВ рдХрд╛ рдпреЛрдЧ рджреЗрддрд╛ рд╣реИред
рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рдЪреБрдирдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рддрдм рдЗрд╕реЗ рдвреВрдВрдврдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╣рдорд╛рд░рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛрдб рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
using System; using System.Windows.Forms; namespace Test { public class Class1 { public static void Message_Export(String message) { MessageBox.Show(message); } public static Double Sum_Export(Double a, Double b) { return a + b; } } }
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдореЗрдВ "рдирд┐рд░реНрдпрд╛рдд" рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЬреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрд╢реЛрдзрдХ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмрдбрд╝реА рднреВрдорд┐рдХрд╛ рдирд╣реАрдВ рдирд┐рднрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рддрд░реАрдХреЛрдВ рдХреЛ рд╕реНрдерд┐рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ, рдФрд░ Visual Studio рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдХрдВрдкрд╛рдЗрд▓рд░ рдЪрд▓рд╛рдПрдВ
рдкреНрд░рд╛рд░рдВрдн> рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд░рдо> Microsoft рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2010> рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдЯреВрд▓> рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ (2010)ред рд╣рдо ildasm рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ Enter рджрдмрд╛рддреЗ рд╣реИрдВред

рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ, рдлрд╝рд╛рдЗрд▓> рдЦреЛрд▓реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рд╣рдорд╛рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ

рдФрд░ рд╣рдореЗрдВ рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдкреЗрдбрд╝ рдорд┐рд▓рддрд╛ рд╣реИ
рдЕрдЧрд▓рд╛, рдлрд╝рд╛рдЗрд▓> рдбрдВрдк, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ рд╣рдорд╛рд░реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕рд╣реЗрдЬреЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Test.il to disk, рдЬрд╣рд╛рдБ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдвреВрдВрдврдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛, рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рд╣реИ D: \

рд╡рд┐рдШрдЯрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреБрдЫ рднреА рднрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдЕрдЧрд▓рд╛, рдХрд┐рд╕реА рднреА рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ Test.il рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдХреЛрдб рджреЗрдЦреЗрдВ, рдЬреЛ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред рдЗрд╕рдореЗрдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХрд╣рд╛рдВ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ ".corflags 0x00000001" рдвреВрдВрдвреЗрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЗрд╡рд▓ il-code рд╣реИ, рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗрд╡рд▓ рдирд┐рд░реНрдпрд╛рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рднреА рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреА рдЕрдирджреЗрдЦреА рдХрд░реЗрдЧрд╛, рдЗрд╕реЗ ".flflags 0x00000002" рдореЗрдВ рдмрджрд▓ рджреЗрдВред
рдлрд╝рд╛рдЗрд▓ рдХреЗ рдПрдХ рд╣реА рдЦрдВрдб рдореЗрдВ, .corflags рд▓рд┐рдЦрдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рд╣рдореЗрдВ рдЕрдкрдиреЗ рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдХреЛ рдорд┐рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛ред
.vtfixup [1] int32 fromunmanaged at VT_01 .vtfixup [1] int32 fromunmanaged at VT_02 .data VT_01 = int32(0) .data VT_02 = int32(0)
рдХреЛрдб рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрдВрддрд┐рдо рдЪрд░рдг рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рд╣реЛрдЧрд╛ред
рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдп рдЦреЛрдЬреЗрдВ
.method public hidebysig instance void Message_Export(string message) cil managed {
рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдХрд▓рдХ рдЙрдиреНрд╣реЗрдВ dll рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗрдЧрд╛ред
рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдирд┐рдореНрди рдлрд╝реЙрд░реНрдо рдХрд╛ рд░рд┐рдХреЙрд░реНрдб рд▓рд┐рдЦреЗрдВ:
.vtentry 1 : 1 .export [1] as Message
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╛рдо рд╕рдВрджреЗрд╢ рдХреЗ рддрд╣рдд, рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рджреВрд╕рд░реЗ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ
.method public hidebysig instance float64 Sum_Export(float64 a, float64 b) cil managed {
рдбрд╛рд▓рдиреЗ
.vtentry 1 : 2 .export [2] as Sum
рдХреНрд░рдорд╢рдГред
рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рд╣реИ рд╡рд╣ рд╣рдорд╛рд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рд╣реИред Visual Studio рдХрдорд╛рдВрдб рдкреНрд░реЙрдореНрдкреНрдЯ рдкрд░, рдирд┐рдореНрди рд▓рд┐рдЦреЗрдВ:
ilasm /OUT:D:\Test.dll D: \ Test.il / dll
рдпрджрд┐ рдЖрдкрдХреЛ рд╕рдВрджреЗрд╢ рдСрдкрд░реЗрд╢рди рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
