рд╣рдо рдЦрд░реЛрдВрдЪ рд╕реЗ рдореЗрдЯрд╛рд╕реНрдЯреЙрдХ рдХреЗ рд▓рд┐рдП рдбреАрдПрд▓рдПрд▓ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рднрд╛рдЧ 1

DLL  Metastock
рдореЗрдЯрд╛рд╕реНрдЯреЙрдХ рд╢рд╛рдпрдж рдмрд╛рдЬрд╛рд░ рдХреЗ рддрдХрдиреАрдХреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИред рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реА рдпрд╛ рдкрд╛рд╕реНрдХрд▓ рдЬреИрд╕реА рдкрд╛рд░рдВрдкрд░рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреА рдкреВрд░реА рд╢рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреА рдЯреНрд░реЗрдбрд┐рдВрдЧ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЧрдП рдмрд╛рд╣рд░реА DLL рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдПрдХ рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдкреВрд░реНрдг рдЕрднрд╛рд╡ рдкрд╛рдХрд░ рд╣реИрд░рд╛рди рдерд╛ред рдПрдХрдорд╛рддреНрд░ рд▓реЗрдЦ рдЬреЛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ: " рдореЗрдЯрд╛рд╕реНрдЯреЙрдХ рдбреЗрд╡рд▓рдкрд░ рдХрд┐рдЯ рдХреНрдпрд╛ рд╣реИ?" ( Mdk ), рдЬреЛ рдбреЗрд▓реНрдлреА рдкрд░ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЖрдк рд╡рд╣рд╛рдВ рдПрдордбреАрдХреЗ рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рднрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдФрд░ рд╕реА / рд╕реА ++ рдореЗрдВ рдЪрд░рдгреЛрдВ рдореЗрдВ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпреЛрдВ (рдПрдордПрд╕рдПрдХреНрд╕ рдбреАрдПрд▓рдПрд▓) рдХреА рдореЗрдЯрд╛рд╕реНрдЯреЙрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рд╕рднреА рдЙрджрд╛рд╣рд░рдг Visual Studio 2010 ( part2 , part3 ) рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдереЗред

рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдмрд┐рдЯ


MSX DLL рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп рдмрд┐рд▓реНрдХреБрд▓ рдореЗрдЯрд╛рд╕реНрдЯреЙрдХ рдХреЗ рдорд╛рдирдХ рдирд┐рд░реНрдорд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рд╕рднреА MSX DLL рдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛ рдХреА рдПрдХ рд╕рд░рдгреА рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд╣рд░реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдо рд╣реЛрддрд╛ рд╣реИред

ExtFml ("DLL Name.Function рдирд╛рдо", arg1, ..., argn) , рдЬрд╣рд╛рдВ

arg1 ... argan рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХ рд╣реИрдВред

рдкреНрд░рддреНрдпреЗрдХ рддрд░реНрдХ рдЪрд╛рд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
тАв рдбреЗрдЯрд╛ рдХреА рд╕рд╛рд░рдгрд┐рдпрд╛рдБ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдУрдкрди, рдЙрдЪреНрдЪ, рдирд┐рдореНрди, рдмрдВрдж, рдЖрджрд┐, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо)
тАв рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕реНрдерд┐рд░рд╛рдВрдХ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 5, -5, 20.55, рдЖрджрд┐)
тАв рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рд╣реИрд▓реЛ рдХрдардлреЛрдбрд╝рд╡рд╛", рдЖрджрд┐)
тАв рдХрд╕реНрдЯрдо рд╕реЗрдЯ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд░рд▓, рддреНрд░рд┐рдХреЛрдгреАрдп, рдЖрджрд┐)
рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рд╣рдо рдмрд╛рдж рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рдеред

MSX DLL рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдп рджреЛ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ:
тАв рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдп
тАв рдЧрдгрдирд╛ рдХрд╛рд░реНрдп (рдпрд╛ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп)ред
рдЖрд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдореЗрдВ рдореЗрдЯрд╛рд╕реНрдЯреЙрдХ рджреНрд╡рд╛рд░рд╛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдп рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕ рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореЗрдЯрд╛рд╕реНрдЯреЙрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХрд╛рд░реНрдп рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рд╕рднреА рдХрд╛рд░реНрдп MSXStruc.h рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдБ рд╣реИрдВред рдпрд╣ рдлрд╝рд╛рдЗрд▓ рд╣рдорд╛рд░реЗ DLL рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдХрдИ рдПрдордПрд╕рдПрдХреНрд╕ рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпреЛрдВ (рдЖрд░рдВрднреАрдХрд░рдг рдХрд╛рд░реНрдп) рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдореЗрдЯреЛрд╕реНрдЯреЛрдХ рдЖрдкрдХреЗ рдбреАрдПрд▓рдПрд▓ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХреЗред рдЙрдирдореЗрдВ рд╕реЗ рдЪрд╛рд░ рд╣реИрдВ:
тАв MSXInfo - рдЖрд╡рд╢реНрдпрдХ рдлрд╝рдВрдХреНрд╢рдиред рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдорд╛рд░рд╛ DLL рдПрдХ MSX DLL рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреЗрд╕рд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рджреЗрддрд╛ рд╣реИ (рдСрдерд░рд╢рд┐рдк, рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рд╕рдВрд╕реНрдХрд░рдг)ред
тАв MSXNthFunction - рдЖрд╡рд╢реНрдпрдХ рдлрд╝рдВрдХреНрд╢рдиред рдпрд╣ MSXInfo рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╢реВрдиреНрдп рд╕реЗ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдлрд╝рдВрдХреНрд╢рди (рдХреЗрд╕ рд╕рдВрд╡реЗрджрдирд╢реАрд▓), рдЙрдирдХреЗ рд╡рд┐рд╡рд░рдг рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдирд╛рдо рд╣реИрдВред
тАв MSXNthArg - рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рддрднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрдм рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рддрд░реНрдХ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
тАв MSXNthCustomString - рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рддрднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрдм рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдХрд╕реНрдЯрдо рддрд░реНрдХ рд╣реИрдВред

рд╕рд┐рджреНрдзрд╛рдВрдд рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдкрд╣рд▓реЗ DLL рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕рдВрдХреЗрддрдХ рдореЗрдВ рдХреАрдорддреЛрдВ, рджрд┐рдирд╛рдВрдХ рдФрд░ рд╕рдордп рдХреА рдПрдХ рд╕рд░рдгреА рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рдПред

рдПрдХ рдХреЛрдб рд▓рд┐рдЦрдирд╛


рд╡реАрдПрд╕ 2010 рдЦреЛрд▓реЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдЦрд╛рд▓реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред
рдлрд╝рд╛рдЗрд▓-> рдирдпрд╛-> рдкреНрд░реЛрдЬреЗрдХреНрдЯ-> рдЕрдиреНрдп рднрд╛рд╖рд╛рдПрдБ-> рд╡рд┐рдЬреБрдЕрд▓ C ++ -> Win32-> Win32 рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓реАрдХреЗрд╢рдиред
рд╣рдорд╛рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдирд╛рдо рд╕реЗрдЯ рдХрд░реЗрдВ (UsePrice) рдФрд░ OK рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред Win32 рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдЦреБрд▓рддрд╛ рд╣реИред
рдЕрдЧрд▓рд╛-> рдФрд░ DLL рдФрд░ рдЦрд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ, рд╕рдорд╛рдкреНрдд рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдПрдХ рдЦрд╛рд▓реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рддреАрди рдлрд╛рдЗрд▓реЗрдВ UsePrice.cpp, UsePrice.def, MSXStruc.h рдЬреЛрдбрд╝реЗрдВред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝реЗрдВ-> рдирдИ рдЖрдЗрдЯрдо рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ ..., рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЙрдЪрд┐рдд рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдЪреБрдиреЗрдВ рдФрд░ рдЙрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рдЬреЛрдбрд╝реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
UsePrice.cpp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рдо рдЕрдкрдирд╛ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВред

/ *
- рдЪрд░рдг 1 - рд╣реЗрдбрд░
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ
#Include рдирд┐рд░реНрджреЗрд╢ рд╕рдВрдХрд▓рдХ рдХреЛ рджреВрд╕рд░реА рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджреЗрддрд╛ рд╣реИ -
рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рд╕реНрд╡рдпрдВ рд╕реНрдерд┐рдд рд╣реИред
рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдпрд╛ рдХреЛрдг рдХреЛрд╖реНрдардХ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рд╣реЗрдбрд░

* /
#include <string.h> #include <stdlib.h> #include <math.h> #include <float.h> #include <tchar.h> //   -  MSX Data Structures (.  MSXStruc.h). #include "MSXStruc.h" 

/ *
- рдЪрд░рдг 2 - рдирд┐рд░реНрдпрд╛рдд
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ
#Define рдирд┐рд░реНрджреЗрд╢ рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ,
рдпрд╣ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдкрд╛рда рдореЗрдВ рдкрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рдХрд╛рд░реНрдпрдХреНрд░рдоред рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рд╕реНрдереВрд▓ рдирд╛рдо рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЛ рд╕реНрдереВрд▓ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд╛рдирдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрджреЗрд╢
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд:

#define рдореИрдХреНрд░реЛ_рдирд╛рдо рд╡рд░реНрдг рдЕрдиреБрдХреНрд░рдо

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдХрдерди рдореЗрдВ рдХреЛрдИ рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдирд╣реАрдВ рд╣реИред рдХреЗ рдмреАрдЪ
рдкрд╛рддреНрд░реЛрдВ рдХреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рдЕрдиреБрдХреНрд░рдо рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
рдЕрдВрддрд░рд╛рд▓ред рдореИрдХреНрд░реЛ рдХреЗрд╡рд▓ рдПрдХ рдирдИ рд░реЗрдЦрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк 1 рдХреЗ рдорд╛рди рдХреЗ рд▓рд┐рдП TRUE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ 0 рдХреЗ рд▓рд┐рдП рдПрдХ FALSE,
рддреЛ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рдореИрдХреНрд░реЛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

#define TRUE 1
# рдЕрд▓реНрдкрдЬреНрдЮрд╛рди рдорд┐рдереНрдпрд╛ реж

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрджрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ TRUE рдпрд╛ FALSE рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ, рддреЛ
рд╡рд╣ рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдорд╢рдГ 1 рдФрд░ 0 рд╕реЗ рдмрджрд▓ рджреЗрдЧрд╛ред
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдЧрд░ DLL_EXPORT рдХреЛрдб рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдХреНрд░реЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ

рдмрд╛рд╣рд░реА "C" __declspec (dllexport)

рд╕реА рдХреЗ рд╕рд╛рде рд╕реА ++ рдХреЛрдб рдХреЛ рдареАрдХ рд╕реЗ рд╕рдВрдпреБрдЧреНрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд╣рд╛рдВ рдирд╛рдордХрд░рдг рдЧрд╛рдпрдм рд╣реИ, рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдмрд╛рд╣рд░реА "C", рдЬреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдЪрд░ / рдлрд╝рдВрдХреНрд╢рди рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрдВрддреНрд░ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред
рдмрд╛рд╣рд░реА "C" рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рд╕рд┐рдЧреНрдиреЗрдЪрд░ рдЬреЗрдирд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ
(C рднрд╛рд╖рд╛ рдХреА рд╢реИрд▓реА рдореЗрдВ) рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╛рдЗрд▓реНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордпред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдирд┐рд╖рд┐рджреНрдз рд╣реИ
рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдХреЛ "рд╕рдЬрд╛рдиреЗ" рдХреЗ рд▓рд┐рдП рд╕реА ++ рд╕рдВрдХрд▓рдХ
рдПрдХ DLL рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп рд╡рд░реНрдгред
Dllexport рд╕реНрдЯреЛрд░реЗрдЬ рдХреНрд▓рд╛рд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ Microsoft-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИ
C рдФрд░ C ++ рднрд╛рд╖рд╛рдПрдБред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд╝рдВрдХреНрд╢рди, рдбреЗрдЯрд╛ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдбреАрдПрд▓рдПрд▓ рдХреЛред
__declspec (dllexport) рдШреЛрд╖рдгрд╛рдХрд░реНрддрд╛
рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП DLL рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЧрдИ рд╣реИ, рдЬреЛ рд╣реЛ рд╕рдХрддреА рд╣реИ
рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдЕрдиреНрдп DLLред рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╛рд░реЛрд╣ рдХреА рдШреЛрд╖рдгрд╛
dllexport рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рдореЙрдбреНрдпреВрд▓ рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╝рд╛рдЗрд▓ (DEF) рдХреЗ рдмрд┐рдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рдХрдо рд╕реЗ рдХрдо рдирд┐рд░реНрдпрд╛рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

* /
 #define DLL_EXPORT extern "C" __declspec(dllexport) 

/ *
- рдЪрд░рдг 3 - рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдп
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ
рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдХрдИ рд╕реЗрд╡рд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
MSX рдлрд╝рдВрдХреНрд╢рди, рддрд╛рдХрд┐ рдореЗрдЯреЛрд╕реНрдЯреЛрдХ рд╣рдорд╛рд░реЗ DLL рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХреЗред
рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рддрд░реНрдХреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП
MSXNthArg рдФрд░ MSXNthCustomString рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред

MSXInfo
рдлрд╝реАрд▓реНрдб рдХреЛ рдмрджрд▓реЗрдВ <VS 2010 C ++ MSX DLL, рдХреЙрдкреАрд░рд╛рдЗрдЯ Pretzel, 2014> рдЕрдкрдиреЗ рд╕рд╛рде
рд▓реЗрдЦрдХ рдХреА рдЬрд╛рдирдХрд╛рд░реА, рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ = 1 рд╕реЗрдЯ рдХрд░реЗрдВред
strncpy (strDest, strSource, count) - рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд╡рд░реНрдгреЛрдВ рдХреЛ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред
тАв рд╕реНрдЯреНрд░реИрдбреЗрд╕реНрдЯ рдЧрдВрддрд╡реНрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред
тАв strSource рд╕реНрд░реЛрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред
тАв рдЧрд┐рдирддреА - рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред
strncpy рдХреЛ рдПрдХ рдЖрд╡рд╢реНрдпрдХ <string.h> рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
Strncpy рдкрд░, рд╡реАрдПрд╕ рд╕реА ++ рд╕рдВрдХрд▓рдХ рдЪреЗрддрд╛рд╡рдиреА рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
strncpy_s (рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ - рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рд╕рд╣реА рд╣реИ)ред

* /
 DLL_EXPORT BOOL __stdcall MSXInfo (MSXDLLDef *a_psDLLDef) { strncpy (a_psDLLDef->szCopyright, "VS 2010 C++ MSX DLL, Copyright (c) Pretzel, 2014", sizeof(a_psDLLDef->szCopyright)-1); a_psDLLDef->iNFuncs = 1; //  . a_psDLLDef->iVersion = MSX_VERSION; //  return MSX_SUCCESS; } 

/ *
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

MSXNthFunction
A_sFuncDef-> szFunctionName рдкрд░ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рди рдмрд┐рд▓реНрдХреБрд▓ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп, рдЬрд┐рд╕реЗ рд╣рдо рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдорд╛рдорд▓рд╛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИред
рдЪрд░ рдорд╛рди:
тАв рдирд╛рдо - рд╣рдорд╛рд░реЗ рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рдирд╛рдоред
тАв рд╡рд┐рд╡рд░рдг - рдпрд╣ рдореЗрдЯрд╛рд╕реНрдЯреЙрдХ рдореЗрдВ рдХреИрд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рдПрдЧрд╛ ('рдкреЗрд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕' рд╡рд┐рдВрдбреЛ рдореЗрдВ)ред
тАв рддрд░реНрдХ - рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред
Strcpy рдкрд░, VS C ++ рдХрдВрдкрд╛рдЗрд▓рд░ рдЪреЗрддрд╛рд╡рдиреА рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ; рдЖрдк strcpy_s рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
(рдЬрд╛рдБрдЪ - рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рд╕рд╣реА рд╣реИ)

* /
 DLL_EXPORT BOOL __stdcall MSXNthFunction (int a_iNthFunc, MSXFuncDef *a_psFuncDef) { BOOL l_bRtrn = MSX_SUCCESS; switch (a_iNthFunc) { case 0: strcpy (a_psFuncDef->szFunctionName, "Price"); strcpy (a_psFuncDef->szFunctionDescription, "FirstFunction"); a_psFuncDef->iNArguments = 0; //   break; default: l_bRtrn = MSX_ERROR; break; } return l_bRtrn; } 


/ *
- рдЪрд░рдг 4 - рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп

* /
 DLL_EXPORT BOOL __stdcall Price(const MSXDataRec *a_psBasic, const MSXDataInfoRecArgsArray *a_psArrayArgs, const MSXNumericArgsArray *a_psNumericArgs, const MSXStringArgsArray *a_psStringArgs, const MSXCustomArgsArray *a_psCustomArgs, MSXResultRec *a_psResult) { //     Close for (int i= a_psBasic ->sClose.iFirstValid; i<= a_psBasic ->sClose.iLastValid; i++) a_psResult->psResultArray->pfValue[ i ] = a_psBasic ->sClose.pfValue[ i ]; //    : // a_psResult->psResultArray->pfValue[ i ] = float (a_psBasic ->psDate[i].lDate); //  // a_psResult->psResultArray->pfValue[ i ] = float (a_psBasic ->psDate[i].lTime); //     . return MSX_SUCCESS; } 

рдЕрдЧрд▓рд╛, UsePrice.def рдлрд╝рд╛рдЗрд▓ рдореЗрдВ , рдирд┐рдореНрди рдХреЛрдб рджрд░реНрдЬ рдХрд░реЗрдВ:

 LIBRARY UsePrice EXPORTS MSXInfo MSXNthFunction Price 

рдХреЛрдб рдХреЗ рд╕рд╛рде MSXStruc.h рднрд░реЗрдВред
MSXStruc.h

 #ifndef MSX_Structures_h #define MSX_Structures_h /* Structures required for MetaStock External Function DLL interface */ #ifndef BOOL typedef int BOOL; #endif #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif // -------------------------------------------------------------------------- // Return this DLL version constant // -------------------------------------------------------------------------- const int MSX_VERSION = 1; // -------------------------------------------------------------------------- // Maximum number of aguments // -------------------------------------------------------------------------- const int MSX_MAXARGS = 9; // -------------------------------------------------------------------------- // Maximum string size (does not include MSXString arguments passed in to // external functions). // -------------------------------------------------------------------------- const int MSX_MAXSTRING = 100; // -------------------------------------------------------------------------- // The following two BOOL return values are returned from MSX functions // -------------------------------------------------------------------------- const BOOL MSX_SUCCESS = FALSE; const BOOL MSX_ERROR = TRUE; // ---------------------------------------------------------------------------------------- // There are four potential argument types // ---------------------------------------------------------------------------------------- const int MSXDataArray = 0; const int MSXNumeric = 1; const int MSXString = 2; const int MSXCustom = 3; // ---------------------------------------------------------------------------------------- // The following structure is used by the exported function MSXInfo // ---------------------------------------------------------------------------------------- typedef struct { char szCopyright[MSX_MAXSTRING]; int iNFuncs; int iVersion; } MSXDLLDef; // ---------------------------------------------------------------------------------------- // The following structure is used by the exported function MSXNthFunction // ---------------------------------------------------------------------------------------- typedef struct { char szFunctionName[MSX_MAXSTRING]; char szFunctionDescription[MSX_MAXSTRING]; int iNArguments; } MSXFuncDef; // ---------------------------------------------------------------------------------------- // The following structure is used by the exported function MSXNthArg // ---------------------------------------------------------------------------------------- typedef struct { int iArgType; // argtype constants: // 0 DataArray // 1 Numeric // 2 String // 3 CustomType char szArgName[MSX_MAXSTRING]; int iNCustomStrings; } MSXFuncArgDef; // ---------------------------------------------------------------------------------------- // The following structure is used by the exported function MSXNthCustomString // ---------------------------------------------------------------------------------------- typedef struct { char szString[MSX_MAXSTRING]; int iID; } MSXFuncCustomString; // ---------------------------------------------------------------------------------------- // the following datastructures are passed into and out of the user-written external // calculation functions. // ---------------------------------------------------------------------------------------- typedef struct { long lDate; long lTime; } MSXDateTime; typedef struct { float *pfValue; int iFirstValid; int iLastValid; } MSXDataInfoRec; typedef struct { MSXDateTime *psDate; MSXDataInfoRec sOpen; MSXDataInfoRec sHigh; MSXDataInfoRec sLow; MSXDataInfoRec sClose; MSXDataInfoRec sVol; MSXDataInfoRec sOI; MSXDataInfoRec sInd; char *pszSecurityName; // Security Name char *pszSymbol; // Security Symbol char *pszSecurityPath; // Path where security is stored (may be in UNC format) char *pszOnlineSource; // Unused - reserved for future use... int iPeriod; // 'D'aily, 'W'eekly, 'M'onthly, 'Q'uarterly, 'I'ntraday int iInterval; // For period='I'ntraday only. 0=tick, other value = minutes compression. int iStartTime; // HHMM format. Undefined for non-intraday period. int iEndTime; // HHMM format. Undefined for non-intraday period. int iSymbolType; // Unused - reserved for future use } MSXDataRec; typedef struct { // possible for MSX_MAXARGS data arrays MSXDataInfoRec *psDataInfoRecs[MSX_MAXARGS]; // pointers to the data arrays int iNRecs; // number of arrays present (just a sanity check) } MSXDataInfoRecArgsArray; typedef struct { float fNumerics[MSX_MAXARGS]; // possible for MSX_MAXARGS numerics int iNRecs; // also a sanity check - func knows how many there should be. } MSXNumericArgsArray; typedef struct { char *pszStrings[MSX_MAXARGS]; // possible for MSX_MAXARGS strings int iNRecs; // ditto the above } MSXStringArgsArray; typedef struct { int iCustomIDs[MSX_MAXARGS]; // numeric ID associated with a custom arg int iNRecs; // ditto the above } MSXCustomArgsArray; typedef struct { MSXDataInfoRec *psResultArray; // Pointer to result array char szExtendedError[MSX_MAXSTRING]; // Extended Error string } MSXResultRec; #endif 


Visual Studio рдореЗрдВ, Build -> Build Solution (F6) рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рд╣рдорд╛рд░рд╛ DLL рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рд╣рдо рдЗрд╕реЗ Metastock'e рдореЗрдВ 'рдмрд╛рд╣рд░реА рдлрд╝рдВрдХреНрд╢рди DLLs' рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рднреЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░рд╛ рд╕рдВрдХреЗрддрдХ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

ExtFml ("UsePrice.Price")

рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рддрд░реНрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдмрд╛рд╣рд░реА рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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


All Articles