diff --git a/src/Avalonia.MicroCom/Avalonia.MicroCom.csproj b/src/Avalonia.MicroCom/Avalonia.MicroCom.csproj index 599d95e67a..e784bda105 100644 --- a/src/Avalonia.MicroCom/Avalonia.MicroCom.csproj +++ b/src/Avalonia.MicroCom/Avalonia.MicroCom.csproj @@ -4,6 +4,7 @@ true + false all diff --git a/src/Avalonia.MicroCom/CallbackBase.cs b/src/Avalonia.MicroCom/CallbackBase.cs index 6783ebe3dc..49d589a5fc 100644 --- a/src/Avalonia.MicroCom/CallbackBase.cs +++ b/src/Avalonia.MicroCom/CallbackBase.cs @@ -1,4 +1,6 @@ -namespace Avalonia.MicroCom +using MicroCom.Runtime; + +namespace Avalonia.MicroCom { public abstract class CallbackBase : IUnknown, IMicroComShadowContainer { diff --git a/src/Avalonia.MicroCom/IMicroComExceptionCallback.cs b/src/Avalonia.MicroCom/IMicroComExceptionCallback.cs deleted file mode 100644 index 08f20339ec..0000000000 --- a/src/Avalonia.MicroCom/IMicroComExceptionCallback.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; - -namespace Avalonia.MicroCom -{ - public interface IMicroComExceptionCallback - { - void RaiseException(Exception e); - } -} diff --git a/src/Avalonia.MicroCom/IMicroComShadowContainer.cs b/src/Avalonia.MicroCom/IMicroComShadowContainer.cs deleted file mode 100644 index a33d3a9811..0000000000 --- a/src/Avalonia.MicroCom/IMicroComShadowContainer.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Avalonia.MicroCom -{ - public interface IMicroComShadowContainer - { - MicroComShadow Shadow { get; set; } - void OnReferencedFromNative(); - void OnUnreferencedFromNative(); - } -} diff --git a/src/Avalonia.MicroCom/IUnknown.cs b/src/Avalonia.MicroCom/IUnknown.cs deleted file mode 100644 index 0dc4106423..0000000000 --- a/src/Avalonia.MicroCom/IUnknown.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System; - -namespace Avalonia.MicroCom -{ - public interface IUnknown : IDisposable - { - } -} diff --git a/src/Avalonia.MicroCom/LocalInterop.cs b/src/Avalonia.MicroCom/LocalInterop.cs deleted file mode 100644 index 785f4e03a5..0000000000 --- a/src/Avalonia.MicroCom/LocalInterop.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; - -namespace Avalonia.MicroCom -{ - unsafe class LocalInterop - { - public static unsafe void CalliStdCallvoid(void* thisObject, void* methodPtr) - { - throw null; - } - - public static unsafe int CalliStdCallint(void* thisObject, Guid* guid, IntPtr* ppv, void* methodPtr) - { - throw null; - } - } -} diff --git a/src/Avalonia.MicroCom/MicroComProxyBase.cs b/src/Avalonia.MicroCom/MicroComProxyBase.cs deleted file mode 100644 index fe8a2bf9cf..0000000000 --- a/src/Avalonia.MicroCom/MicroComProxyBase.cs +++ /dev/null @@ -1,110 +0,0 @@ -using System; -using System.Runtime.ConstrainedExecution; -using System.Runtime.InteropServices; -using System.Threading; - -namespace Avalonia.MicroCom -{ - public unsafe class MicroComProxyBase : CriticalFinalizerObject, IUnknown - { - private IntPtr _nativePointer; - private bool _ownsHandle; - private SynchronizationContext _synchronizationContext; - - public IntPtr NativePointer - { - get - { - if (_nativePointer == IntPtr.Zero) - throw new ObjectDisposedException(this.GetType().FullName); - return _nativePointer; - } - } - - public void*** PPV => (void***)NativePointer; - - public MicroComProxyBase(IntPtr nativePointer, bool ownsHandle) - { - _nativePointer = nativePointer; - _ownsHandle = ownsHandle; - _synchronizationContext = SynchronizationContext.Current; - if(!_ownsHandle) - GC.SuppressFinalize(this); - } - - protected virtual int VTableSize => 3; - - public void AddRef() - { - LocalInterop.CalliStdCallvoid(PPV, (*PPV)[1]); - } - - public void Release() - { - LocalInterop.CalliStdCallvoid(PPV, (*PPV)[2]); - } - - public int QueryInterface(Guid guid, out IntPtr ppv) - { - IntPtr r = default; - var rv = LocalInterop.CalliStdCallint(PPV, &guid, &r, (*PPV)[0]); - ppv = r; - return rv; - } - - public T QueryInterface() where T : IUnknown - { - var guid = MicroComRuntime.GetGuidFor(typeof(T)); - var rv = QueryInterface(guid, out var ppv); - if (rv == 0) - return (T)MicroComRuntime.CreateProxyFor(typeof(T), ppv, true); - throw new COMException("QueryInterface failed", rv); - } - - public bool IsDisposed => _nativePointer == IntPtr.Zero; - - protected virtual void Dispose(bool disposing) - { - if(_nativePointer == IntPtr.Zero) - return; - if (_ownsHandle) - { - Release(); - _ownsHandle = false; - } - _nativePointer = IntPtr.Zero; - GC.SuppressFinalize(this); - } - - public void Dispose() => Dispose(true); - - public bool OwnsHandle => _ownsHandle; - - public void EnsureOwned() - { - if (!_ownsHandle) - { - GC.ReRegisterForFinalize(true); - AddRef(); - _ownsHandle = true; - } - } - - private static readonly SendOrPostCallback _disposeDelegate = DisposeOnContext; - - private static void DisposeOnContext(object state) - { - (state as MicroComProxyBase)?.Dispose(false); - } - - ~MicroComProxyBase() - { - if(!_ownsHandle) - return; - if (_synchronizationContext == null) - Dispose(); - else - _synchronizationContext.Post(_disposeDelegate, this); - } - } -} diff --git a/src/Avalonia.MicroCom/MicroComRuntime.cs b/src/Avalonia.MicroCom/MicroComRuntime.cs deleted file mode 100644 index b9a56a69ba..0000000000 --- a/src/Avalonia.MicroCom/MicroComRuntime.cs +++ /dev/null @@ -1,143 +0,0 @@ -using System; -using System.Collections.Concurrent; -using System.Runtime.InteropServices; - -namespace Avalonia.MicroCom -{ - public static unsafe class MicroComRuntime - { - private static ConcurrentDictionary _vtables = new ConcurrentDictionary(); - - private static ConcurrentDictionary> _factories = - new ConcurrentDictionary>(); - private static ConcurrentDictionary _guids = new ConcurrentDictionary(); - private static ConcurrentDictionary _guidsToTypes = new ConcurrentDictionary(); - - internal static readonly Guid ManagedObjectInterfaceGuid = Guid.Parse("cd7687c0-a9c2-4563-b08e-a399df50c633"); - - static MicroComRuntime() - { - Register(typeof(IUnknown), new Guid("00000000-0000-0000-C000-000000000046"), - (ppv, owns) => new MicroComProxyBase(ppv, owns)); - RegisterVTable(typeof(IUnknown), MicroComVtblBase.Vtable); - } - - public static void RegisterVTable(Type t, IntPtr vtable) - { - _vtables[t] = vtable; - } - - public static void Register(Type t, Guid guid, Func proxyFactory) - { - _factories[t] = proxyFactory; - _guids[t] = guid; - _guidsToTypes[guid] = t; - } - - public static Guid GetGuidFor(Type type) => _guids[type]; - - public static T CreateProxyFor(void* pObject, bool ownsHandle) => (T)CreateProxyFor(typeof(T), new IntPtr(pObject), ownsHandle); - public static T CreateProxyFor(IntPtr pObject, bool ownsHandle) => (T)CreateProxyFor(typeof(T), pObject, ownsHandle); - - public static T CreateProxyOrNullFor(void* pObject, bool ownsHandle) where T : class => - pObject == null ? null : (T)CreateProxyFor(typeof(T), new IntPtr(pObject), ownsHandle); - - public static T CreateProxyOrNullFor(IntPtr pObject, bool ownsHandle) where T : class => - pObject == IntPtr.Zero ? null : (T)CreateProxyFor(typeof(T), pObject, ownsHandle); - - public static object CreateProxyFor(Type type, IntPtr pObject, bool ownsHandle) => _factories[type](pObject, ownsHandle); - - public static IntPtr GetNativeIntPtr(this T obj, bool owned = false) where T : IUnknown - => new IntPtr(GetNativePointer(obj, owned)); - public static void* GetNativePointer(T obj, bool owned = false) where T : IUnknown - { - if (obj == null) - return null; - if (obj is MicroComProxyBase proxy) - { - if(owned) - proxy.AddRef(); - return (void*)proxy.NativePointer; - } - - if (obj is IMicroComShadowContainer container) - { - container.Shadow ??= new MicroComShadow(container); - void* ptr = null; - var res = container.Shadow.GetOrCreateNativePointer(typeof(T), &ptr); - if (res != 0) - throw new COMException( - "Unable to create native callable wrapper for type " + typeof(T) + " for instance of type " + - obj.GetType(), - res); - if (owned) - container.Shadow.AddRef((Ccw*)ptr); - return ptr; - } - throw new ArgumentException("Unable to get a native pointer for " + obj); - } - - public static object GetObjectFromCcw(IntPtr ccw) - { - var ptr = (Ccw*)ccw; - var shadow = (MicroComShadow)GCHandle.FromIntPtr(ptr->GcShadowHandle).Target; - return shadow.Target; - } - - public static bool IsComWrapper(IUnknown obj) => obj is MicroComProxyBase; - - public static object TryUnwrapManagedObject(IUnknown obj) - { - if (obj is not MicroComProxyBase proxy) - return null; - if (proxy.QueryInterface(ManagedObjectInterfaceGuid, out _) != 0) - return null; - // Successful QueryInterface always increments ref counter - proxy.Release(); - return GetObjectFromCcw(proxy.NativePointer); - } - - public static bool TryGetTypeForGuid(Guid guid, out Type t) => _guidsToTypes.TryGetValue(guid, out t); - - public static bool GetVtableFor(Type type, out IntPtr ptr) => _vtables.TryGetValue(type, out ptr); - - public static void UnhandledException(object target, Exception e) - { - if (target is IMicroComExceptionCallback cb) - { - try - { - cb.RaiseException(e); - } - catch - { - // We've tried - } - } - - } - - public static T CloneReference(this T iface) where T : IUnknown - { - var proxy = (MicroComProxyBase)(object)iface; - var ownedPointer = GetNativePointer(iface, true); - return CreateProxyFor(ownedPointer, true); - } - - public static T QueryInterface(this IUnknown unknown) where T : IUnknown - { - var proxy = (MicroComProxyBase)unknown; - return proxy.QueryInterface(); - } - - public static void UnsafeAddRef(this IUnknown unknown) - { - ((MicroComProxyBase)unknown).AddRef(); - } - - public static void UnsafeRelease(this IUnknown unknown) - { - ((MicroComProxyBase)unknown).Release(); - } - } -} diff --git a/src/Avalonia.MicroCom/MicroComShadow.cs b/src/Avalonia.MicroCom/MicroComShadow.cs deleted file mode 100644 index 765ff3b9ad..0000000000 --- a/src/Avalonia.MicroCom/MicroComShadow.cs +++ /dev/null @@ -1,177 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; -using System.Threading; - -namespace Avalonia.MicroCom -{ - public unsafe class MicroComShadow : IDisposable - { - private readonly object _lock = new object(); - private readonly Dictionary _shadows = new Dictionary(); - private readonly Dictionary _backShadows = new Dictionary(); - private GCHandle? _handle; - private volatile int _refCount; - internal IMicroComShadowContainer Target { get; } - internal MicroComShadow(IMicroComShadowContainer target) - { - Target = target; - Target.Shadow = this; - } - - internal int QueryInterface(Ccw* ccw, Guid* guid, void** ppv) - { - if (MicroComRuntime.TryGetTypeForGuid(*guid, out var type)) - return QueryInterface(type, ppv); - else if (*guid == MicroComRuntime.ManagedObjectInterfaceGuid) - { - ccw->RefCount++; - *ppv = ccw; - return 0; - } - else - return unchecked((int)0x80004002u); - } - - internal int QueryInterface(Type type, void** ppv) - { - if (!type.IsInstanceOfType(Target)) - return unchecked((int)0x80004002u); - - var rv = GetOrCreateNativePointer(type, ppv); - if (rv == 0) - AddRef((Ccw*)*ppv); - return rv; - } - - internal int GetOrCreateNativePointer(Type type, void** ppv) - { - if (!MicroComRuntime.GetVtableFor(type, out var vtable)) - return unchecked((int)0x80004002u); - lock (_lock) - { - - if (_shadows.TryGetValue(type, out var shadow)) - { - var targetCcw = (Ccw*)shadow; - AddRef(targetCcw); - *ppv = targetCcw; - return 0; - } - else - { - var intPtr = Marshal.AllocHGlobal(Marshal.SizeOf()); - var targetCcw = (Ccw*)intPtr; - *targetCcw = default; - targetCcw->RefCount = 0; - targetCcw->VTable = vtable; - if (_handle == null) - _handle = GCHandle.Alloc(this); - targetCcw->GcShadowHandle = GCHandle.ToIntPtr(_handle.Value); - _shadows[type] = intPtr; - _backShadows[intPtr] = type; - *ppv = targetCcw; - - return 0; - } - } - } - - internal int AddRef(Ccw* ccw) - { - if (Interlocked.Increment(ref _refCount) == 1) - { - try - { - Target.OnReferencedFromNative(); - } - catch (Exception e) - { - MicroComRuntime.UnhandledException(Target, e); - } - } - - return Interlocked.Increment(ref ccw->RefCount); - } - - internal int Release(Ccw* ccw) - { - Interlocked.Decrement(ref _refCount); - var cnt = Interlocked.Decrement(ref ccw->RefCount); - if (cnt == 0) - return FreeCcw(ccw); - - return cnt; - } - - int FreeCcw(Ccw* ccw) - { - lock (_lock) - { - // Shadow got resurrected by a call to QueryInterface from another thread - if (ccw->RefCount != 0) - return ccw->RefCount; - - var intPtr = new IntPtr(ccw); - var type = _backShadows[intPtr]; - _backShadows.Remove(intPtr); - _shadows.Remove(type); - Marshal.FreeHGlobal(intPtr); - if (_shadows.Count == 0) - { - _handle?.Free(); - _handle = null; - try - { - Target.OnUnreferencedFromNative(); - } - catch(Exception e) - { - MicroComRuntime.UnhandledException(Target, e); - } - } - } - - return 0; - } - - /* - Needs to be called to support the following scenario: - 1) Object created - 2) Object passed to native code, shadow is created, CCW is created - 3) Native side has never called AddRef - - In that case the GC handle to the shadow object is still alive - */ - - public void Dispose() - { - lock (_lock) - { - List toRemove = null; - foreach (var kv in _backShadows) - { - var ccw = (Ccw*)kv.Key; - if (ccw->RefCount == 0) - { - toRemove ??= new List(); - toRemove.Add(kv.Key); - } - } - - if(toRemove != null) - foreach (var intPtr in toRemove) - FreeCcw((Ccw*)intPtr); - } - } - } - - [StructLayout(LayoutKind.Sequential)] - struct Ccw - { - public IntPtr VTable; - public IntPtr GcShadowHandle; - public volatile int RefCount; - public MicroComShadow GetShadow() => (MicroComShadow)GCHandle.FromIntPtr(GcShadowHandle).Target; - } -} diff --git a/src/Avalonia.MicroCom/MicroComVtblBase.cs b/src/Avalonia.MicroCom/MicroComVtblBase.cs deleted file mode 100644 index 7092f8131a..0000000000 --- a/src/Avalonia.MicroCom/MicroComVtblBase.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; - -namespace Avalonia.MicroCom -{ - public unsafe class MicroComVtblBase - { - private List _methods = new List(); - [UnmanagedFunctionPointerAttribute(CallingConvention.StdCall)] - private delegate int AddRefDelegate(Ccw* ccw); - - [UnmanagedFunctionPointerAttribute(CallingConvention.StdCall)] - private delegate int QueryInterfaceDelegate(Ccw* ccw, Guid* guid, void** ppv); - - public static IntPtr Vtable { get; } = new MicroComVtblBase().CreateVTable(); - public MicroComVtblBase() - { - AddMethod((QueryInterfaceDelegate)QueryInterface); - AddMethod((AddRefDelegate)AddRef); - AddMethod((AddRefDelegate)Release); - } - - protected void AddMethod(void* f) - { - _methods.Add(new IntPtr(f)); - } - - protected void AddMethod(Delegate d) - { - GCHandle.Alloc(d); - _methods.Add(Marshal.GetFunctionPointerForDelegate(d)); - } - - protected unsafe IntPtr CreateVTable() - { - var ptr = (IntPtr*)Marshal.AllocHGlobal((IntPtr.Size + 1) * _methods.Count); - for (var c = 0; c < _methods.Count; c++) - ptr[c] = _methods[c]; - return new IntPtr(ptr); - } - - static int QueryInterface(Ccw* ccw, Guid* guid, void** ppv) => ccw->GetShadow().QueryInterface(ccw, guid, ppv); - static int AddRef(Ccw* ccw) => ccw->GetShadow().AddRef(ccw); - static int Release(Ccw* ccw) => ccw->GetShadow().Release(ccw); - } -} diff --git a/src/Avalonia.Native/Avalonia.Native.csproj b/src/Avalonia.Native/Avalonia.Native.csproj index 2001a2fcbc..4ceb1be340 100644 --- a/src/Avalonia.Native/Avalonia.Native.csproj +++ b/src/Avalonia.Native/Avalonia.Native.csproj @@ -6,7 +6,6 @@ true net6.0;netstandard2.0 true - Avalonia.MicroCom diff --git a/src/Avalonia.Native/AvaloniaNativePlatform.cs b/src/Avalonia.Native/AvaloniaNativePlatform.cs index b45fe5559b..532893884a 100644 --- a/src/Avalonia.Native/AvaloniaNativePlatform.cs +++ b/src/Avalonia.Native/AvaloniaNativePlatform.cs @@ -10,6 +10,7 @@ using Avalonia.Platform; using Avalonia.Rendering; using Avalonia.Rendering.Composition; using JetBrains.Annotations; +using MicroCom.Runtime; namespace Avalonia.Native { diff --git a/src/Avalonia.Native/CallbackBase.cs b/src/Avalonia.Native/CallbackBase.cs index 56f9505cb4..2d875dbc0e 100644 --- a/src/Avalonia.Native/CallbackBase.cs +++ b/src/Avalonia.Native/CallbackBase.cs @@ -2,6 +2,7 @@ using System.Runtime.ExceptionServices; using Avalonia.MicroCom; using Avalonia.Platform; +using MicroCom.Runtime; namespace Avalonia.Native { diff --git a/src/Avalonia.Native/NativeControlHostImpl.cs b/src/Avalonia.Native/NativeControlHostImpl.cs index 2c9c1728d3..8a3488d95e 100644 --- a/src/Avalonia.Native/NativeControlHostImpl.cs +++ b/src/Avalonia.Native/NativeControlHostImpl.cs @@ -4,6 +4,7 @@ using Avalonia.MicroCom; using Avalonia.Native.Interop; using Avalonia.Platform; using Avalonia.VisualTree; +using MicroCom.Runtime; namespace Avalonia.Native { diff --git a/src/Windows/Avalonia.Win32/Avalonia.Win32.csproj b/src/Windows/Avalonia.Win32/Avalonia.Win32.csproj index 1d265369fd..0d29bb91ea 100644 --- a/src/Windows/Avalonia.Win32/Avalonia.Win32.csproj +++ b/src/Windows/Avalonia.Win32/Avalonia.Win32.csproj @@ -3,7 +3,6 @@ net6.0;netstandard2.0 true Avalonia.Win32 - Avalonia.MicroCom diff --git a/src/Windows/Avalonia.Win32/ClipboardImpl.cs b/src/Windows/Avalonia.Win32/ClipboardImpl.cs index 7cf8b14bed..7e058cb052 100644 --- a/src/Windows/Avalonia.Win32/ClipboardImpl.cs +++ b/src/Windows/Avalonia.Win32/ClipboardImpl.cs @@ -7,6 +7,7 @@ using Avalonia.Input; using Avalonia.Input.Platform; using Avalonia.Threading; using Avalonia.Win32.Interop; +using MicroCom.Runtime; namespace Avalonia.Win32 { @@ -83,7 +84,7 @@ namespace Avalonia.Win32 while (true) { - var ptr = MicroCom.MicroComRuntime.GetNativeIntPtr(wrapper); + var ptr = wrapper.GetNativeIntPtr(); var hr = UnmanagedMethods.OleSetClipboard(ptr); if (hr == 0) @@ -107,7 +108,7 @@ namespace Avalonia.Win32 if (hr == 0) { - using var proxy = MicroCom.MicroComRuntime.CreateProxyFor(dataObject, true); + using var proxy = MicroComRuntime.CreateProxyFor(dataObject, true); using var wrapper = new OleDataObject(proxy); var formats = wrapper.GetDataFormats().ToArray(); return formats; @@ -131,7 +132,7 @@ namespace Avalonia.Win32 if (hr == 0) { - using var proxy = MicroCom.MicroComRuntime.CreateProxyFor(dataObject, true); + using var proxy = MicroComRuntime.CreateProxyFor(dataObject, true); using var wrapper = new OleDataObject(proxy); var rv = wrapper.Get(format); return rv; diff --git a/src/Windows/Avalonia.Win32/DragSource.cs b/src/Windows/Avalonia.Win32/DragSource.cs index 1159c5bfc9..53d4345c5e 100644 --- a/src/Windows/Avalonia.Win32/DragSource.cs +++ b/src/Windows/Avalonia.Win32/DragSource.cs @@ -3,6 +3,7 @@ using Avalonia.Input; using Avalonia.Input.Platform; using Avalonia.Threading; using Avalonia.Win32.Interop; +using MicroCom.Runtime; namespace Avalonia.Win32 { @@ -19,8 +20,8 @@ namespace Avalonia.Win32 using var src = new OleDragSource(); var allowed = OleDropTarget.ConvertDropEffect(allowedEffects); - var objPtr = MicroCom.MicroComRuntime.GetNativeIntPtr(dataObject); - var srcPtr = MicroCom.MicroComRuntime.GetNativeIntPtr(src); + var objPtr = MicroComRuntime.GetNativeIntPtr(dataObject); + var srcPtr = MicroComRuntime.GetNativeIntPtr(src); UnmanagedMethods.DoDragDrop(objPtr, srcPtr, (int)allowed, out var finalEffect); diff --git a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs index 9d1920498b..91e79c9670 100644 --- a/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs +++ b/src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs @@ -7,6 +7,7 @@ using System.Runtime.InteropServices.ComTypes; using System.Text; using Avalonia.MicroCom; +using MicroCom.Runtime; using Avalonia.Win32.Win32Com; // ReSharper disable InconsistentNaming diff --git a/src/Windows/Avalonia.Win32/OleContext.cs b/src/Windows/Avalonia.Win32/OleContext.cs index c025d06fe7..e41423a334 100644 --- a/src/Windows/Avalonia.Win32/OleContext.cs +++ b/src/Windows/Avalonia.Win32/OleContext.cs @@ -5,6 +5,7 @@ using Avalonia.Platform; using Avalonia.Threading; using Avalonia.Win32.Interop; using Avalonia.Win32.Win32Com; +using MicroCom.Runtime; namespace Avalonia.Win32 { @@ -47,7 +48,7 @@ namespace Avalonia.Win32 return false; } - var trgPtr = MicroCom.MicroComRuntime.GetNativeIntPtr(target); + var trgPtr = target.GetNativeIntPtr(); return UnmanagedMethods.RegisterDragDrop(hwnd.Handle, trgPtr) == UnmanagedMethods.HRESULT.S_OK; } diff --git a/src/Windows/Avalonia.Win32/OleDataObject.cs b/src/Windows/Avalonia.Win32/OleDataObject.cs index f7345b3ff7..90992d803f 100644 --- a/src/Windows/Avalonia.Win32/OleDataObject.cs +++ b/src/Windows/Avalonia.Win32/OleDataObject.cs @@ -10,7 +10,7 @@ using Avalonia.Input; using Avalonia.MicroCom; using Avalonia.Utilities; using Avalonia.Win32.Interop; - +using MicroCom.Runtime; using IDataObject = Avalonia.Input.IDataObject; namespace Avalonia.Win32 diff --git a/src/Windows/Avalonia.Win32/OleDropTarget.cs b/src/Windows/Avalonia.Win32/OleDropTarget.cs index 3d0d35228c..1c22fd025d 100644 --- a/src/Windows/Avalonia.Win32/OleDropTarget.cs +++ b/src/Windows/Avalonia.Win32/OleDropTarget.cs @@ -5,6 +5,7 @@ using Avalonia.Input.Raw; using Avalonia.MicroCom; using Avalonia.Platform; using Avalonia.Win32.Interop; +using MicroCom.Runtime; using DropEffect = Avalonia.Win32.Win32Com.DropEffect; namespace Avalonia.Win32 diff --git a/src/Windows/Avalonia.Win32/Win32StorageProvider.cs b/src/Windows/Avalonia.Win32/Win32StorageProvider.cs index bb1de56f2b..8cc0a380f9 100644 --- a/src/Windows/Avalonia.Win32/Win32StorageProvider.cs +++ b/src/Windows/Avalonia.Win32/Win32StorageProvider.cs @@ -12,6 +12,7 @@ using Avalonia.Platform.Storage; using Avalonia.Platform.Storage.FileIO; using Avalonia.Win32.Interop; using Avalonia.Win32.Win32Com; +using MicroCom.Runtime; namespace Avalonia.Win32 { diff --git a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUICompositedWindow.cs b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUICompositedWindow.cs index a09918a3a6..ef3de9fbe1 100644 --- a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUICompositedWindow.cs +++ b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUICompositedWindow.cs @@ -6,6 +6,7 @@ using Avalonia.MicroCom; using Avalonia.OpenGL; using Avalonia.OpenGL.Egl; using Avalonia.Win32.Interop; +using MicroCom.Runtime; namespace Avalonia.Win32.WinRT.Composition { diff --git a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUICompositorConnection.cs b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUICompositorConnection.cs index 9a6bd9572a..8a41c00add 100644 --- a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUICompositorConnection.cs +++ b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUICompositorConnection.cs @@ -12,6 +12,7 @@ using Avalonia.OpenGL.Angle; using Avalonia.OpenGL.Egl; using Avalonia.Rendering; using Avalonia.Win32.Interop; +using MicroCom.Runtime; namespace Avalonia.Win32.WinRT.Composition { diff --git a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUIEffectBase.cs b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUIEffectBase.cs index ea75a2f311..32f44842f8 100644 --- a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUIEffectBase.cs +++ b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUIEffectBase.cs @@ -2,6 +2,7 @@ using System.Linq; using System.Runtime.InteropServices; using Avalonia.MicroCom; +using MicroCom.Runtime; namespace Avalonia.Win32.WinRT.Composition { diff --git a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositedWindowSurface.cs b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositedWindowSurface.cs index 4ed882552b..fc04dcda26 100644 --- a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositedWindowSurface.cs +++ b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUiCompositedWindowSurface.cs @@ -6,6 +6,7 @@ using Avalonia.OpenGL.Egl; using Avalonia.OpenGL.Surfaces; using Avalonia.Utilities; using Avalonia.Win32.Interop; +using MicroCom.Runtime; namespace Avalonia.Win32.WinRT.Composition { diff --git a/src/Windows/Avalonia.Win32/WinRT/NativeWinRTMethods.cs b/src/Windows/Avalonia.Win32/WinRT/NativeWinRTMethods.cs index 89cde01ff4..1794b022fe 100644 --- a/src/Windows/Avalonia.Win32/WinRT/NativeWinRTMethods.cs +++ b/src/Windows/Avalonia.Win32/WinRT/NativeWinRTMethods.cs @@ -7,6 +7,7 @@ using System.Runtime.InteropServices; using System.Threading; using Avalonia.MicroCom; using Avalonia.Win32.Interop; +using MicroCom.Runtime; namespace Avalonia.Win32.WinRT { diff --git a/src/Windows/Avalonia.Win32/WinRT/WinRTInspectable.cs b/src/Windows/Avalonia.Win32/WinRT/WinRTInspectable.cs index d2ec957b8e..1fde57fe38 100644 --- a/src/Windows/Avalonia.Win32/WinRT/WinRTInspectable.cs +++ b/src/Windows/Avalonia.Win32/WinRT/WinRTInspectable.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using Avalonia.MicroCom; +using MicroCom.Runtime; namespace Avalonia.Win32.WinRT {