08.08.2014 18:47, Adriano dos Santos Fernandes wrote: > It works provided that who called the method that returned the new > object was compiled together (or with the same API version) of who is > calling the object method. In most of cases I'd imagine, this is true.
If this assumption is true, then checking of versions, upgrading and refcounting is complete overkill. Your design can be simplified to following: 1) Plugin/Provider DLL exports plain C handle-based API. This solve compiler and language compatibility issues because all compiler's authors have agreement about plain C ABI. 2) Plugin manager after loading plugin DLL assign pointers to exported functions to set of imported function variables, leaving missing entries to NotImplemented() stub. This solve versions compatibility issues. 3) Thin language-depended OO envelope compiled into target application, map its methods to imported functions like this: class IInterface{ private: SomeHandle Handle; public: IOtherInterface Method(a, b) { LocalStatus status; IOtherInterface(imp_IInterface_Method(Handle, status, a, b)); status.check(); } } 4) Classes are returned by value which solve problems with their lifetime. 5) On internal side similar envelope converts internal OO classes to handle-based interface. OtherHandle exp_IInterface_Method(SomeHandle, status, a, b) { try { return GetHandle(IInterface(Handle)->Method(a, b)); } catch(const Exception& ex) { ex.stuff(status); return 0; } } This architecture solves all problems with version, language and compiler incompatibility and does not cause performance and memory penalty in contrast with yours. -- WBR, SD. ------------------------------------------------------------------------------ Want fast and easy access to all the code in your enterprise? Index and search up to 200,000 lines of code with a free copy of Black Duck Code Sight - the same software that powers the world's largest code search on Ohloh, the Black Duck Open Hub! Try it now. http://p.sf.net/sfu/bds Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel