private static extern Result CoCreateInstanceFromApp([In][MarshalAs(UnmanagedType.LPStruct)]
                                                      Guid rclsid,
                                                      IntPtr pUnkOuter,
                                                      ComContext dwClsContext,
                                                      IntPtr reserved,
                                                      int countMultiQuery,
                                                      ref MultiQueryInterface query);
        public unsafe static bool TryCreateComInstance(Guid clsid, CLSCTX clsctx, Guid riid, ComObject comObject)
        {
            MultiQueryInterface localQuery = new MultiQueryInterface()
            {
                InterfaceIID    = new IntPtr(&riid),
                IUnknownPointer = IntPtr.Zero,
                ResultCode      = 0,
            };

            var result = CoCreateInstanceFromApp(clsid, IntPtr.Zero, clsctx, IntPtr.Zero, 1, ref localQuery);

            comObject.NativePointer = localQuery.IUnknownPointer;
            return(result.Success && localQuery.ResultCode.Success);
        }
        public unsafe static void CreateComInstance(Guid clsid, CLSCTX clsctx, Guid riid, ComObject comObject)
        {
            MultiQueryInterface localQuery = new MultiQueryInterface()
            {
                InterfaceIID    = new IntPtr(&riid),
                IUnknownPointer = IntPtr.Zero,
                ResultCode      = 0,
            };

            var result = CoCreateInstanceFromApp(clsid, IntPtr.Zero, clsctx, IntPtr.Zero, 1, ref localQuery);

            result.CheckError();
            localQuery.ResultCode.CheckError();
            comObject.NativePointer = localQuery.IUnknownPointer;
        }
Beispiel #4
0
        public static unsafe bool TryCreateComInstance(Guid classGuid, ComContext context, Guid interfaceGuid, ComObject comObject)
        {
            if (!PlatformDetection.IsUAP)
            {
                var result = CoCreateInstance(classGuid, IntPtr.Zero, context, interfaceGuid, out IntPtr pointer);
                comObject.NativePointer = pointer;
                return(result.Success);
            }
            else
            {
                var localQuery = new MultiQueryInterface()
                {
                    InterfaceIID    = new IntPtr(&interfaceGuid),
                    IUnknownPointer = IntPtr.Zero,
                    ResultCode      = 0,
                };

                var result = CoCreateInstanceFromApp(classGuid, IntPtr.Zero, context, IntPtr.Zero, 1, ref localQuery);
                comObject.NativePointer = localQuery.IUnknownPointer;
                return(result.Success && localQuery.ResultCode.Success);
            }
        }
        public unsafe static void CreateComInstance(Guid classGuid, ComContext context, Guid interfaceGuid, ComObject comObject)
        {
            if (!VorticePlatformDetection.IsUAP)
            {
                var result = CoCreateInstance(classGuid, IntPtr.Zero, context, interfaceGuid, out IntPtr pointer);
                result.CheckError();
                comObject.NativePointer = pointer;
            }
            else
            {
                var localQuery = new MultiQueryInterface()
                {
                    InterfaceIID    = new IntPtr(&interfaceGuid),
                    IUnknownPointer = IntPtr.Zero,
                    ResultCode      = 0,
                };

                var result = CoCreateInstanceFromApp(classGuid, IntPtr.Zero, context, IntPtr.Zero, 1, ref localQuery);
                result.CheckError();
                localQuery.ResultCode.CheckError();
                comObject.NativePointer = localQuery.IUnknownPointer;
            }
        }
        public static unsafe Result CreateComInstanceRestricted(Guid classGuid, ComContext context, Guid interfaceGuid,
                                                                out IntPtr comObject)
        {
            var localQuery = new MultiQueryInterface
            {
                InterfaceIID    = new IntPtr(&interfaceGuid),
                IUnknownPointer = IntPtr.Zero,
                ResultCode      = 0
            };

            var result = CoCreateInstanceFromApp(classGuid, IntPtr.Zero, context, IntPtr.Zero, 1, ref localQuery);

            comObject = localQuery.IUnknownPointer;

            if (!result.Success)
            {
                return(result);
            }

            if (!localQuery.ResultCode.Success)
            {
                return(localQuery.ResultCode);
            }

            if (result != Result.Ok)
            {
                return(result);
            }

            if (localQuery.ResultCode != Result.Ok)
            {
                return(localQuery.ResultCode);
            }

            return(Result.Ok);
        }