/// <summary>
 /// Creates  COM class instance directly without using any COM Activation or thread Marshaling services.
 /// </summary>
 /// <param name="libraryModule"></param>
 /// <param name="clsid"></param>
 /// <returns></returns>
 public static object DangerousCreateInstanceDirectly(NRegFreeCom.IAssembly libraryModule, Guid clsid)
 {
     var classFactory = GetClassFactory(libraryModule, clsid);
     var iid = new Guid(WELL_KNOWN_IIDS.IID_IUnknown);
     object obj;
     classFactory.CreateInstance(IntPtr.Zero, ref iid, out obj);
     return obj;
 }
 /// <seealso href="https://gist.github.com/1568627/76da6e65a2d925fffdb48a0ae5efd783281f9244"/>
 private static IClassFactory_AutoMarshal GetClassFactory(NRegFreeCom.IAssembly libraryModule, Guid clsid)
 {
     var getClassFactory = libraryModule.GetDelegate<DEF_Objbase.DllGetClassObject>();
     var classFactoryIid = new Guid(WELL_KNOWN_IIDS.IID_IClassFactory);
     IClassFactory_AutoMarshal classFactory;
     var hresult = getClassFactory(ref clsid, ref classFactoryIid, out classFactory);
     if (hresult != 0)
     {
         throw new Win32Exception(hresult, string.Concat("Cannot create class factory for {0}", clsid));
     }
     return classFactory;
 }