Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }