public static uint DllGetClassObject(Guid rclsid, Guid riid, out IntPtr ppv)
        {
            ppv = IntPtr.Zero;

            try
            {
                if (riid.CompareTo(Guid.Parse("00000001-0000-0000-c000-000000000046")) == 0)
                {
                    //Call to DllClassObject is requesting IClassFactory.
                    var    instance = new ComClass1();
                    IntPtr iUnk     = Marshal.GetIUnknownForObject(instance);
                    //return instance;
                    Marshal.QueryInterface(iUnk, ref riid, out ppv);
                    return(0);
                }
                else
                {
                    return(0x80040111);    //CLASS_E_CLASSNOTAVAILABLE
                }
            }
            catch
            {
                return(0x80040111);    //CLASS_E_CLASSNOTAVAILABLE
            }
        }
        public static int DllGetClassObject(Guid rclsid, Guid riid, out IntPtr ppv)
        {
            ppv = IntPtr.Zero;

            try
            {
                //Call to DllClassObject is requesting IClassFactory.
                var    instance = new ComClass1();
                IntPtr iUnk     = Marshal.GetIUnknownForObject(instance);
                //return instance;
                Marshal.QueryInterface(iUnk, ref riid, out ppv);
                return(0);
            }
            catch
            {
                return(-1);
            }
        }