Ejemplo n.º 1
0
 private static extern Result CoCreateInstance([In][MarshalAs(UnmanagedType.LPStruct)]
                                               Guid rclsid,
                                               IntPtr pUnkOuter,
                                               ComContext dwClsContext,
                                               [In][MarshalAs(UnmanagedType.LPStruct)]
                                               Guid riid,
                                               out IntPtr comObject);
Ejemplo n.º 2
0
 private static extern Result CoCreateInstanceFromApp([In][MarshalAs(UnmanagedType.LPStruct)]
                                                      Guid rclsid,
                                                      IntPtr pUnkOuter,
                                                      ComContext dwClsContext,
                                                      IntPtr reserved,
                                                      int countMultiQuery,
                                                      ref MultiQueryInterface query);
Ejemplo n.º 3
0
 public static Result CreateComInstance(Guid classGuid, ComContext context, Guid interfaceGuid,
                                        out IntPtr comObject)
 {
     return(PlatformDetection.IsAppContainerProcess
                ? CreateComInstanceRestricted(classGuid, context, interfaceGuid, out comObject)
                : CreateComInstanceUnrestricted(classGuid, context, interfaceGuid, out comObject));
 }
Ejemplo n.º 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);
            }
        }
Ejemplo n.º 5
0
        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;
            }
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
 public static Result CreateComInstanceUnrestricted(Guid classGuid, ComContext context, Guid interfaceGuid,
                                                    out IntPtr comObject) =>
 CoCreateInstance(classGuid, IntPtr.Zero, context, interfaceGuid, out comObject);