private static extern Result CoCreateInstance([In][MarshalAs(UnmanagedType.LPStruct)] Guid rclsid, IntPtr pUnkOuter, ComContext dwClsContext, [In][MarshalAs(UnmanagedType.LPStruct)] Guid riid, out IntPtr comObject);
private static extern Result CoCreateInstanceFromApp([In][MarshalAs(UnmanagedType.LPStruct)] Guid rclsid, IntPtr pUnkOuter, ComContext dwClsContext, IntPtr reserved, int countMultiQuery, ref MultiQueryInterface query);
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)); }
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); }
public static Result CreateComInstanceUnrestricted(Guid classGuid, ComContext context, Guid interfaceGuid, out IntPtr comObject) => CoCreateInstance(classGuid, IntPtr.Zero, context, interfaceGuid, out comObject);