diff --git a/Samples/BackgroundTask/InProc BackgroundTask/cs-winui/BackgroundTaskBuilder/App.xaml.cs b/Samples/BackgroundTask/InProc BackgroundTask/cs-winui/BackgroundTaskBuilder/App.xaml.cs index 1cfac7251..510a383e7 100644 --- a/Samples/BackgroundTask/InProc BackgroundTask/cs-winui/BackgroundTaskBuilder/App.xaml.cs +++ b/Samples/BackgroundTask/InProc BackgroundTask/cs-winui/BackgroundTaskBuilder/App.xaml.cs @@ -37,8 +37,8 @@ public App() { this.InitializeComponent(); Guid taskGuid = typeof(BackgroundTask).GUID; - ComServer.CoRegisterClassObject(ref taskGuid, - new ComServer.BackgroundTaskFactory(), + ComServer.CoRegisterClassObject(in taskGuid, + new ComServer.BackgroundTaskFactory(), ComServer.CLSCTX_LOCAL_SERVER, ComServer.REGCLS_MULTIPLEUSE, out _RegistrationToken); diff --git a/Samples/BackgroundTask/InProc BackgroundTask/cs-winui/BackgroundTaskBuilder/BackgroundTask.cs b/Samples/BackgroundTask/InProc BackgroundTask/cs-winui/BackgroundTaskBuilder/BackgroundTask.cs index 87fec188e..fd785297c 100644 --- a/Samples/BackgroundTask/InProc BackgroundTask/cs-winui/BackgroundTaskBuilder/BackgroundTask.cs +++ b/Samples/BackgroundTask/InProc BackgroundTask/cs-winui/BackgroundTaskBuilder/BackgroundTask.cs @@ -14,11 +14,8 @@ namespace BackgroundTaskBuilder { // Background task implementation. // {87654321-1234-1234-1234-1234567890AE} is GUID to register this task with BackgroundTaskBuilder. Generate a random GUID before implementing. - [ComVisible(true)] - [ClassInterface(ClassInterfaceType.None)] [Guid("87654321-1234-1234-1234-1234567890AA")] - [ComSourceInterfaces(typeof(IBackgroundTask))] - public class BackgroundTask : IBackgroundTask + public partial class BackgroundTask : IBackgroundTask { /// /// This method is the main entry point for the background task. The system will believe this background task diff --git a/Samples/BackgroundTask/InProc BackgroundTask/cs-winui/BackgroundTaskBuilder/BackgroundTaskBuilder.csproj b/Samples/BackgroundTask/InProc BackgroundTask/cs-winui/BackgroundTaskBuilder/BackgroundTaskBuilder.csproj index ecb8e798f..447173f3d 100644 --- a/Samples/BackgroundTask/InProc BackgroundTask/cs-winui/BackgroundTaskBuilder/BackgroundTaskBuilder.csproj +++ b/Samples/BackgroundTask/InProc BackgroundTask/cs-winui/BackgroundTaskBuilder/BackgroundTaskBuilder.csproj @@ -14,6 +14,7 @@ true + True @@ -51,13 +52,4 @@ true - - - - False - True - False - True - True - \ No newline at end of file diff --git a/Samples/BackgroundTask/InProc BackgroundTask/cs-winui/BackgroundTaskBuilder/ComServer.cs b/Samples/BackgroundTask/InProc BackgroundTask/cs-winui/BackgroundTaskBuilder/ComServer.cs index 25f4f5854..51da14aed 100644 --- a/Samples/BackgroundTask/InProc BackgroundTask/cs-winui/BackgroundTaskBuilder/ComServer.cs +++ b/Samples/BackgroundTask/InProc BackgroundTask/cs-winui/BackgroundTaskBuilder/ComServer.cs @@ -3,22 +3,25 @@ using System; using System.Runtime.InteropServices; +using System.Runtime.InteropServices.Marshalling; +using Windows.ApplicationModel.Background; using WinRT; namespace BackgroundTaskBuilder { // COM server startup code. - internal class ComServer + internal partial class ComServer { - [DllImport("ole32.dll")] - public static extern int CoRegisterClassObject( - ref Guid classId, + [LibraryImport("ole32.dll")] + public static partial int CoRegisterClassObject( + in Guid classId, [MarshalAs(UnmanagedType.Interface)] IClassFactory objectAsUnknown, uint executionContext, uint flags, out uint registrationToken); - [DllImport("ole32.dll")] - public static extern int CoRevokeObject( + + [LibraryImport("ole32.dll")] + public static partial int CoRevokeObject( out uint registrationToken); public const uint CLSCTX_LOCAL_SERVER = 4; @@ -31,26 +34,25 @@ public static extern int CoRevokeObject( public const string IID_IUnknown = "00000000-0000-0000-C000-000000000046"; public const string IID_IClassFactory = "00000001-0000-0000-C000-000000000046"; - [ComImport] - [ComVisible(false)] + [GeneratedComInterface] [Guid(IID_IClassFactory)] - [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - public interface IClassFactory + public partial interface IClassFactory { [PreserveSig] - uint CreateInstance(IntPtr objectAsUnknown, ref Guid interfaceId, out IntPtr objectPointer); + uint CreateInstance(IntPtr objectAsUnknown, in Guid interfaceId, out IntPtr objectPointer); [PreserveSig] - uint LockServer(bool Lock); + uint LockServer([MarshalAs(UnmanagedType.Bool)] bool Lock); } - internal class BackgroundTaskFactory : IClassFactory where TaskType : TaskInterface, new() + [GeneratedComClass] + internal partial class BackgroundTaskFactory : IClassFactory { public BackgroundTaskFactory() { } - public uint CreateInstance(IntPtr objectAsUnknown, ref Guid interfaceId, out IntPtr objectPointer) + public uint CreateInstance(IntPtr objectAsUnknown, in Guid interfaceId, out IntPtr objectPointer) { if (objectAsUnknown != IntPtr.Zero) { @@ -58,13 +60,13 @@ public uint CreateInstance(IntPtr objectAsUnknown, ref Guid interfaceId, out Int return CLASS_E_NOAGGREGATION; } - if ((interfaceId != typeof(TaskType).GUID) && (interfaceId != new Guid(IID_IUnknown))) + if ((interfaceId != typeof(IBackgroundTask).GUID) && (interfaceId != new Guid(IID_IUnknown))) { objectPointer = IntPtr.Zero; return E_NOINTERFACE; } - objectPointer = MarshalInterface.FromManaged(new TaskType()); + objectPointer = MarshalInterface.FromManaged(new BackgroundTask()); return S_OK; } diff --git a/Samples/BackgroundTask/OutOfProc BackgroundTask/cs-winui/BackgroundTaskBuilder/BackgroundTask.cs b/Samples/BackgroundTask/OutOfProc BackgroundTask/cs-winui/BackgroundTaskBuilder/BackgroundTask.cs index 502cbfe42..d320a3c3e 100644 --- a/Samples/BackgroundTask/OutOfProc BackgroundTask/cs-winui/BackgroundTaskBuilder/BackgroundTask.cs +++ b/Samples/BackgroundTask/OutOfProc BackgroundTask/cs-winui/BackgroundTaskBuilder/BackgroundTask.cs @@ -14,11 +14,8 @@ namespace BackgroundTaskBuilder { // Background task implementation. // {87654321-1234-1234-1234-1234567890AE} is GUID to register this task with BackgroundTaskBuilder. Generate a random GUID before implementing. - [ComVisible(true)] - [ClassInterface(ClassInterfaceType.None)] [Guid("87654321-1234-1234-1234-1234567890AE")] - [ComSourceInterfaces(typeof(IBackgroundTask))] - public class BackgroundTask : IBackgroundTask, IDisposable + public partial class BackgroundTask : IBackgroundTask, IDisposable { private bool disposed = false; diff --git a/Samples/BackgroundTask/OutOfProc BackgroundTask/cs-winui/BackgroundTaskBuilder/BackgroundTaskBuilder.csproj b/Samples/BackgroundTask/OutOfProc BackgroundTask/cs-winui/BackgroundTaskBuilder/BackgroundTaskBuilder.csproj index 4310b6de5..6378422b4 100644 --- a/Samples/BackgroundTask/OutOfProc BackgroundTask/cs-winui/BackgroundTaskBuilder/BackgroundTaskBuilder.csproj +++ b/Samples/BackgroundTask/OutOfProc BackgroundTask/cs-winui/BackgroundTaskBuilder/BackgroundTaskBuilder.csproj @@ -15,6 +15,7 @@ true DISABLE_XAML_GENERATED_MAIN BackgroundTaskBuilder.Program + True @@ -40,7 +41,7 @@ - + @@ -52,13 +53,4 @@ true - - - - False - True - False - True - True - \ No newline at end of file diff --git a/Samples/BackgroundTask/OutOfProc BackgroundTask/cs-winui/BackgroundTaskBuilder/ComServer.cs b/Samples/BackgroundTask/OutOfProc BackgroundTask/cs-winui/BackgroundTaskBuilder/ComServer.cs index 86dc27c33..67fb51bc2 100644 --- a/Samples/BackgroundTask/OutOfProc BackgroundTask/cs-winui/BackgroundTaskBuilder/ComServer.cs +++ b/Samples/BackgroundTask/OutOfProc BackgroundTask/cs-winui/BackgroundTaskBuilder/ComServer.cs @@ -3,16 +3,18 @@ using System; using System.Runtime.InteropServices; +using System.Runtime.InteropServices.Marshalling; +using Windows.ApplicationModel.Background; using WinRT; namespace BackgroundTaskBuilder { // COM server startup code. - internal class ComServer + internal partial class ComServer { - [DllImport("ole32.dll")] - public static extern int CoRegisterClassObject( - ref Guid classId, + [LibraryImport("ole32.dll")] + public static partial int CoRegisterClassObject( + in Guid classId, [MarshalAs(UnmanagedType.Interface)] IClassFactory objectAsUnknown, uint executionContext, uint flags, @@ -28,26 +30,25 @@ public static extern int CoRegisterClassObject( public const string IID_IUnknown = "00000000-0000-0000-C000-000000000046"; public const string IID_IClassFactory = "00000001-0000-0000-C000-000000000046"; - [ComImport] - [ComVisible(false)] + [GeneratedComInterface] [Guid(IID_IClassFactory)] - [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] - public interface IClassFactory + public partial interface IClassFactory { [PreserveSig] - uint CreateInstance(IntPtr objectAsUnknown, ref Guid interfaceId, out IntPtr objectPointer); + uint CreateInstance(IntPtr objectAsUnknown, in Guid interfaceId, out IntPtr objectPointer); [PreserveSig] - uint LockServer(bool Lock); + uint LockServer([MarshalAs(UnmanagedType.Bool)] bool Lock); } - internal class BackgroundTaskFactory : IClassFactory where TaskType : TaskInterface, new() + [GeneratedComClass] + internal partial class BackgroundTaskFactory : IClassFactory { public BackgroundTaskFactory() { } - public uint CreateInstance(IntPtr objectAsUnknown, ref Guid interfaceId, out IntPtr objectPointer) + public uint CreateInstance(IntPtr objectAsUnknown, in Guid interfaceId, out IntPtr objectPointer) { if (objectAsUnknown != IntPtr.Zero) { @@ -55,13 +56,13 @@ public uint CreateInstance(IntPtr objectAsUnknown, ref Guid interfaceId, out Int return CLASS_E_NOAGGREGATION; } - if ((interfaceId != typeof(TaskType).GUID) && (interfaceId != new Guid(IID_IUnknown))) + if ((interfaceId != typeof(IBackgroundTask).GUID) && (interfaceId != new Guid(IID_IUnknown))) { objectPointer = IntPtr.Zero; return E_NOINTERFACE; } - objectPointer = MarshalInterface.FromManaged(new TaskType()); + objectPointer = MarshalInterface.FromManaged(new BackgroundTask()); return S_OK; } diff --git a/Samples/BackgroundTask/OutOfProc BackgroundTask/cs-winui/BackgroundTaskBuilder/Program.cs b/Samples/BackgroundTask/OutOfProc BackgroundTask/cs-winui/BackgroundTaskBuilder/Program.cs index 68f88f215..0503ac5bc 100644 --- a/Samples/BackgroundTask/OutOfProc BackgroundTask/cs-winui/BackgroundTaskBuilder/Program.cs +++ b/Samples/BackgroundTask/OutOfProc BackgroundTask/cs-winui/BackgroundTaskBuilder/Program.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation and Contributors. +// Copyright (c) Microsoft Corporation and Contributors. // Licensed under the MIT License. using System; @@ -22,8 +22,8 @@ static void Main(string[] args) if (args.Contains("-RegisterForBGTaskServer")) { Guid taskGuid = typeof(BackgroundTask).GUID; - ComServer.CoRegisterClassObject(ref taskGuid, - new ComServer.BackgroundTaskFactory(), + ComServer.CoRegisterClassObject(in taskGuid, + new ComServer.BackgroundTaskFactory(), ComServer.CLSCTX_LOCAL_SERVER, ComServer.REGCLS_MULTIPLEUSE, out _RegistrationToken);