рдпрд╣ рдЖрд▓реЗрдЦ рдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб (рдкреНрд░рдмрдВрдзрд┐рдд) рдХреА рдХреЙрд▓ рдХреЛ рдЕрдирд╡рд╛рдВрдЯреЗрдб (рдЕрдкреНрд░рдмрдВрдзрд┐рдд) рдФрд░ рдЙрдирдХреА рд╕рд╣рднрд╛рдЧрд┐рддрд╛ (COM рдФрд░ PInvoke рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛) рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╡рд┐рдзрд┐
рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛
klsaymon рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╡рд┐рдзрд┐ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕реНрдерд┐рддрд┐ рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ (ArchiCAD) рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╕рдВрдкрд░реНрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ (рдкреНрд▓рдЧрдЗрдиреНрд╕) рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп (рдкреНрд▓рдЧрдЗрди) рдХреЗрд╡рд▓ C \ C ++ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдФрд░ C # (рдкреНрд░рдмрдВрдзрд┐рдд) рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП UI рдХреЗ рд╕рд╛рде рдПрдХ рдореВрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (WindowForms) рд╣реИред рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдкреНрд▓рдЧрдЗрди) рдФрд░ рдЙрдирдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рд╡рд┐рдВрдбреЛрдЬрдлрд╝реЙрд░реНрдо) рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, C \ C ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдкреНрд▓рдЧрдЗрди) рдПрдХ рддреГрддреАрдп-рдкрдХреНрд╖ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (ArchiCAD) рдФрд░ рд╣рдорд╛рд░реЗ (WindowsForms) рдХреЗ рдмреАрдЪ рдПрдХ рд╕реЗрддреБ рдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ рдорд╛рди рд▓реЗрдВ рдХрд┐ рдХреЙрд▓ рд╕реАрдзреЗ рдЕрдирд╡рд╛рдВрдЯреЗрдб рдХреЛрдб рд╕реЗ рдХреА рдЧрдИ рд╣реИред рдпрд╛рдиреА рдПрдХ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдкреНрд▓рдЧрдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдВрдбрд▓ рдХреЛ рдмрджрд▓реЗрдВред
рдЗрд╕ рдпреЛрдЬрдирд╛ рдореЗрдВ рдЕрдВрддрд┐рдо рдмрд╛рддрдЪреАрдд рдпреЛрдЬрдирд╛ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЧрдИ рд╣реИ:

рдЖрдЗрдП WindowsForms рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдореЗрдВ рдХрд┐рд╕реА рддреГрддреАрдп-рдкрдХреНрд╖ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдПрдВ, рдЗрд╕реЗ рдЗрдХрд╛рдИ рдХрд╣рддреЗ рд╣реИрдВред ComVanish рдФрд░ StructLayout рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╕реЗрдЯ рдХрд░реЗрдВред
[ComVisible(true)] [StructLayout(LayoutKind.Sequential)] public struct Entity {
рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП "% SYSTEMROOT% \ Microsoft.NET \ Framework \ v2.0.50727 \ regasm.exe" "$ (TargetPath)" /tlb:$(TargetName).tlb / codebase (рдЗрд╕реЗ рдкреЛрд╕реНрдЯрдмреЙрдбреА рдЗрд╡реЗрдВрдЯреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ) рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдПрдВ ( * .tlb) рдФрд░ рдЗрд╕реЗ рдЕрдкреНрд░рдмрдВрдзрд┐рдд C ++ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВред
#import ".\\..\\Managed.Csharp\\bin\\Debug\\Managed.Csharp.tlb" no_namespace
рддреГрддреАрдп-рдкрдХреНрд╖ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдПрдБред
public interface IExternalApplication {
SetExternalApplication рдкрджреНрдзрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрд▓рд╛рд╕ рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рддреБрд░рдВрдд рдПрдХ рдЫреЛрдЯрд╛ рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
public class Program { private static IExternalApplication _externalApplication;
Unmanages / рдкреНрд░рдмрдВрдзрд┐рдд C ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдмреНрд░рд┐рдЬ) рдореЗрдВ, WindowsForms рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝реЗрдВред

рдЕрдм рд╣рдорд╛рд░реЗ рдмреНрд░рд┐рдЬ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╣рдореЗрдВ IExternalApplication рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрд╛рд╣реНрдп рдирд┐рд░реНрдорд╛рдг рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
рд╣рдо рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рдмрдВрдзрд┐рдд C \ C ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдкреНрд▓рдЧрдЗрди ') рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
typedef void* (__cdecl *GetEntityFunc)(int); public ref class ExternalApplication: public IExternalApplication { public:
рд╣рдо рдкреНрд░рдмрдВрдзрд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдФрд░ StartApplication рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
рдкреНрд▓рдЧрдЗрди рдореЗрдВ, рд╣рдо рдЗрдХрд╛рдИ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
рд╣рдо рдмреНрд░рд┐рдЬ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВред
typedef void (__cdecl *StartApplicationFunc)(HMODULE); int _tmain(int argc, _TCHAR* argv[]) { HMODULE bridgeHandle = LoadLibrary(L"UnmanagedManaged.C++.dll"); StartApplicationFunc startApplication = (StartApplicationFunc)GetProcAddress(bridgeHandle, "StartApplication"); HMODULE handle = GetCurrentModule(); startApplication(handle); return 0; }
рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред

рдкрд░рд┐рдгрд╛рдо рдкрд░ рдкрд╣реБрдБрдЪ рдЬрд╛рддрд╛ рд╣реИред
Coogle рдХреЛрдб рдкрд░ рд╕реНрд░реЛрддps рд╕реНрд░реЛрдд рдХреЛрдб рд╕реБрдВрджрд░рддрд╛ рдФрд░ рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдмрд╛рддрдЪреАрдд рдХреЗ рддрд░реНрдХ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ
рдпрд╣ рд╕рдм рдЪрдорддреНрдХрд╛рд░ рд╕рднреА рдЖрдЧрд╛рдореА рд▓рд╛рднреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдШреВрдорддрд╛ рд╣реИ