рдореБрдЭреЗ COM рддрдХрдиреАрдХ рдкрд╕рдВрдж рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо COM рдХреА рддрдХрдиреАрдХ, рдкреНрд░рд╢рдВрд╕рд╛ рдпрд╛ рдХрдорд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд▓рд┐рдирдХреНрд╕ рдкрд░ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдФрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ред рдПрдХ рдмрд╛рдЗрдХ? рдФрдЪрд┐рддреНрдп?
рдЪрд▓реЛ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рд╣реИред
рд╡рд┐рдХреА рдФрд░ MSDN рд▓рд┐рдВрдХ COM рдСрдмреНрдЬреЗрдХреНрдЯ (1)рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдПрдХ рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдЬреЛ рдХрдо рд╕реЗ рдХрдо рдПрдХ COM рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЬреБрдбрд╝реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ рдЬрд┐рд╕реЗ COM рд╕рд░реНрд╡рд░ (2) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрдВрдЯрд░рдлреЗрд╕ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
COM рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдПрдХ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рд╢реБрджреНрдз рдЖрднрд╛рд╕реА рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВред рдПрдХ рд╡рд┐рд╢реЗрд╖ IUnaware рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА COM рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдкреНрд░рддреНрдпреЗрдХ COM рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред COM рдореЗрдВ, рдпрд╣ GUID рдХреА рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рд╣рдо COM рдХреЗ рдкрд╣рд▓реЗ рджреЛрд╖ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗред GUID рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ, рдФрд░ рдмрд╛рдХреА рд╕рдм рд╡рд┐рдХреА рдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИред рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдкрдардиреАрдп рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рддрд░реАрдХреЗ рд╕реЗ (рдЖрдЗрдП рдЗрд╕реЗ рдпреВрдЖрдИрдбреА рдХрд╣рддреЗ рд╣реИрдВ)ред
IUnogn рдФрд░ uiid#define define_uiid(name) \ inline static const std::string& guid() { const static std::string idn(dom_guid_pre_name #name); return idn; } namespace Dom { using uiid = std::string; using clsuid= std::string; struct IUnknown { virtual long AddRef() = 0; virtual long Release() = 0; virtual bool QueryInterface(const uiid&, void **ppv) = 0; define_uiid(Unknown) }; }
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрд▓рд╛рд╕ рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ (рдХреНрд▓реВрд╕рд┐рдб), рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреЛ рднреА рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдХрдо рдкрдардиреАрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ рдЬреЛ рд╕рд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЖрдк рдЕрдм рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВ (рд╢рд╛рдпрдж рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ)ред
рд╕рд╛рд░рд╛рдВрд╢
рдПрдХ COM рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рд╕рдореЗрдВ рдПрдХрд▓ рд╡рд░реНрдЧ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдПрдХ COM рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ - IUnogn (рдХрд┐рд╕реА рднреА COM рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ)ред COM рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕рдорд╛рди рд╢реНрд░реЗрдгреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг: рд░рд┐рд▓реАрдЬрд╝ рдФрд░ рдбрд┐рдмрдЧ рд╕рдВрд╕реНрдХрд░рдг)ред
COM рд╕рд░реНрд╡рд░ (2)рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЬреБрдбрд╝рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп (рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рд╕рд╛рдЭрд╛ рд╡рд╕реНрддреБ рд╣реИ - рддрд╛рдХрд┐) рдХрдо рд╕реЗ рдХрдо рдПрдХ COM рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдХреЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
extern "C" bool DllCreateInstance(const uiid& iid, void** ppv)
рдХреНрд▓рд╛рд╕реАрдб рджреНрд╡рд╛рд░рд╛ рдПрдХ рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрджрд░реНрднреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, рд╣рд░ рдмрд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред IUnaware рдХреЗ рд▓рд┐рдП рдХреЙрд▓ :: AddRef рдХреЛ рднреА рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ IUnogn :: рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдХрдореА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
extern "C" bool DllCanUnloadNow()
рдпрджрд┐ SO рдХрд╛ рд╕рдВрджрд░реНрдн рд╕рдВрдЦреНрдпрд╛ 0 рд╣реИ, рддреЛ рдЖрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЕрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
extern "C" bool DllRegisterServer(IUnknown* unknown)
"рд░рдЬрд┐рд╕реНрдЯреНрд░реА" рдореЗрдВ рд╕рднреА рдХреНрд▓реВрд╕рд┐рдб рд╕рд░реНрд╡рд░ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред COM рд╕рд░реНрд╡рд░ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рджреМрд░рд╛рди рдПрдХ рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
extern "C" bool DllUnRegisterServer(IUnknown* unknown)
рдкрдВрдЬреАрдХреГрдд рдХреНрд▓реВрд╕реАрдб рд╕рд░реНрд╡рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ "рд░рдЬрд┐рд╕реНрдЯреНрд░реА" рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рд╕реЗ рд╣рдЯрд╛рддрд╛ рд╣реИред COM рд╕рд░реНрд╡рд░ рдХреА рд╕реНрдерд╛рдкрдирд╛ рд░рджреНрдж рдХрд░рддреЗ рд╕рдордп рдПрдХ рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
SimpleHello рдЙрджрд╛рд╣рд░рдг, IHello рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдШреЛрд╖рдгрд╛: struct IHello : public virtual Dom::IUnknown { virtual void Print() = 0; define_uiid(Hello) };
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди: class SimpleHello : public Dom::Implement<SimpleHello, IHello> { public: SimpleHello() { printf("%s\n", __PRETTY_FUNCTION__); } ~SimpleHello() { printf("%s\n", __PRETTY_FUNCTION__); } virtual void Print() { printf("Hello from %s\n",__PRETTY_FUNCTION__); } define_clsuid(SimpleHello) }; namespace Dom { DOM_SERVER_EXPORT_BEGIN EXPORT_CLASS(SimpleHello) DOM_SERVER_EXPORT_END DOM_SERVER_INSTALL(IUnknown* unknown) { Interface<IRegistryServer> registry; if (unknown->QueryInterface(IRegistryServer::guid(), registry)) {
рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдПрдХ рдЕрдзрд┐рдХ рд╕рдВрд░рдЪрд┐рдд рдШреЛрд╖рдгрд╛ рдФрд░ рддрд░реНрдХ рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИред
рдбреЛрдо :: рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдВ <SimpleHello, IHello> - IUnogn рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИ, рдЬрдм рдПрдХ рд╡рд╕реНрддреБ (рд╕реА ++ 11 рдФрд░ рд╡реИрд░реЗрдбрд┐рдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ) рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╕рдордп "рдЪреАрдиреА" рдЬреЛрдбрд╝рддрд╛ рд╣реИ:
template <typename T, typename ... IFACES> struct Implement : virtual public IUnknown, virtual public IFACESтАж { ... };
IRegistryServer рдЗрдВрдЯрд░рдлрд╝реЗрд╕ - COM рд╕рд░реНрд╡рд░ рдХреЗ "рд░рдЬрд┐рд╕реНрдЯреНрд░реА" рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рддрд░реАрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
COM- рд╕рд░реНрд╡рд░ рдХреЗ "рд░рдЬрд┐рд╕реНрдЯрд░" (3)рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рдорд╣рддреНрд╡ рдХреЛ рдХрдо рдХрд░рдХреЗ рдЖрдВрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрднрд╡рддрдГ COM рдХрд╛ рдореБрдЦреНрдп рд╕реНрддрдВрдн рд╣реИред Microsoft рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ (рдЖрдИрдбреАрдПрд▓) рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддрд╛ рд╣реИ, рдореИрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдЧрдпрд╛ред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рдмрдиреНрд╕? рд╕рдордЭрдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рд╕рд╛рджрдЧреА, рд╡рд╕реВрд▓реА рдХреА рд╕рдВрднрд╛рд╡рдирд╛, рд╕рд░реНрд╡рд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╡рд┐рд╢реЗрд╖ рдмрд╛рди, рдЖрдк рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдо рд╕реНрдерд╛рди (рдЖрдзрд╛рд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬрд┐рд╕рдореЗрдВ рд╕рд░реНрд╡рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдВрдЧреЗ) рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдЕрдЦрдВрдбрддрд╛ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрдорд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ, рд╕рдВрднрд╡ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ, рд╡рд╕реНрддреБ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрдиред
рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдирдореВрдирд╛ рдЖрд╡реЗрджрди (4)рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ "рд▓рд╛рдЗрдмреНрд░реЗрд░реА" рдФрд░ рдПрдХ рдЫреЛрдЯреЗ "рдкреНрд░реЛрдЧреНрд░рд╛рдо" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
"рд▓рд╛рдЗрдмреНрд░реЗрд░реА" рдПрдХ рд░реИрдкрд░ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ / рд▓реЛрдб рдХрд░рдиреЗ / рдЕрдирд▓реЛрдб рдХрд░рдиреЗ, рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ, рдПрдХ рд╣реА рдкреВрд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╣реИ рдЬреЛ рдЖрд╡реЗрджрди рдХрд░рддреЗ рд╕рдордп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдмрд╛рдХреА рд╕рдм, "рдореИрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ," рд╡рд╣ рдЦреБрдж рдХрд░реЗрдЧреАред
" Programka " - regsrv рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Microsoft RegSrv32 рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд╣реИ рдЬреЛ рдПрдХ рд╣реА рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ (+ рдирд╛рдо рд╕реНрдерд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, + рдкрдВрдЬреАрдХреГрдд рдХреНрд▓реВрд╕реАрдб рдФрд░ COM-рд╕рд░реНрд╡рд░ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛)ред
рдирдореВрдирд╛ #include "../include/dom.h" #include "../../skel/ihello.h" int main() { Dom::Interface<Dom::IUnknown> unkwn; Dom::Interface<IHello> hello; if (Dom::CreateInstance(Dom::clsid("SimpleHello"), unkwn)) { unkwn->QueryInterface(IHello::guid(), hello); hello->Print(); } else { printf("[WARNING] Class `SimpleHello` not register.\nFirst execute command\n\tregsrv <fullpath>/libskel.so\n... and try again."); } return 0; }
рдбреЛрдо (5)рдбреЛрдо (рдбрд╛рдпрдирд╛рдорд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓), рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред
рдЧрд┐рдЯ рдХреНрд▓реЛрди
рдЖрдкрдХрд╛ рдзрдиреНрдпрд╡рд╛рдж