G = F + IDispatch (allowing script clients including VBS, C# dynamic, Java and FPC) **** .idl **** interface IXxxx : IDispatch library XxxxLibrary coclass CoXxxx **** .h **** class CoXxxx : ITest // IUnknown methods // IDispatch methods // IXxxx methods class CoXxxxFactory : IClassFactory // IUnknown methods // IClassFactory methods **** registry **** name -> co class GUID co class GUID -> name co class GUID -> DLL co class GUID -> library GUID auto via DllRegisterServer and DllUnegisterServer in DLL **** C++ usage **** import tlb IXxxxPtr p IXxxxPtr.CreateInstance() or: IXxxxPtr p() **** C# usage **** CoXxxx co = new CoXxxxClass() IXxxx o = (IXxxx)co **** dynamic C# usage **** dynamic o = Activator.CreateInstance() **** VBS usage **** Set o = CreateObject()