From 3f0044efcb4a70addc321759f056dd646d60b3ac Mon Sep 17 00:00:00 2001 From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com> Date: Thu, 24 Oct 2024 08:44:53 +0000 Subject: [PATCH 1/7] Use null for null checks --- src/Files.App.CsWin32/Windows.Win32.ComHeapPtr.cs | 2 +- src/Files.App.CsWin32/Windows.Win32.ComPtr.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Files.App.CsWin32/Windows.Win32.ComHeapPtr.cs b/src/Files.App.CsWin32/Windows.Win32.ComHeapPtr.cs index 14f248ee7ff5..bac9ce4c808f 100644 --- a/src/Files.App.CsWin32/Windows.Win32.ComHeapPtr.cs +++ b/src/Files.App.CsWin32/Windows.Win32.ComHeapPtr.cs @@ -16,7 +16,7 @@ public unsafe struct ComHeapPtr : IDisposable where T : unmanaged private T* _ptr; public bool IsNull - => _ptr == default; + => _ptr == null; public ComHeapPtr(T* ptr) { diff --git a/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs b/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs index d3896fc8fa4e..832ccebbc74a 100644 --- a/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs +++ b/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs @@ -16,7 +16,7 @@ public unsafe struct ComPtr : IDisposable where T : unmanaged private T* _ptr; public bool IsNull - => _ptr == default; + => _ptr == null; public ComPtr(T* ptr) { From ee155d84b9943e18aae5e51923ec8dcbf65b8155 Mon Sep 17 00:00:00 2001 From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com> Date: Thu, 24 Oct 2024 09:04:20 +0000 Subject: [PATCH 2/7] Introduce ComPtr.As() --- src/Files.App.CsWin32/Windows.Win32.ComPtr.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs b/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs index 832ccebbc74a..e829d53d4fb0 100644 --- a/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs +++ b/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs @@ -38,6 +38,16 @@ public ComPtr(T* ptr) return (T**)Unsafe.AsPointer(ref Unsafe.AsRef(in this)); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public readonly ComPtr As(Guid riid) + { + void** newRawPtr; + ComPtr newPtr = default; + ((IUnknown*)ptr_)->QueryInterface(&riid, &newRawPtr); + newPtr._ptr = (U*)*newRawPtr; + return newPtr; + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Dispose() { From 9276088aebe63ec934d690b3566ec3a84927a384 Mon Sep 17 00:00:00 2001 From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com> Date: Thu, 24 Oct 2024 09:08:30 +0000 Subject: [PATCH 3/7] Fix pointer referencing --- src/Files.App.CsWin32/Windows.Win32.ComPtr.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs b/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs index e829d53d4fb0..0836c6046ec6 100644 --- a/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs +++ b/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs @@ -41,10 +41,10 @@ public ComPtr(T* ptr) [MethodImpl(MethodImplOptions.AggressiveInlining)] public readonly ComPtr As(Guid riid) { - void** newRawPtr; + void* newRawPtr; ComPtr newPtr = default; ((IUnknown*)ptr_)->QueryInterface(&riid, &newRawPtr); - newPtr._ptr = (U*)*newRawPtr; + newPtr._ptr = (U*)newRawPtr; return newPtr; } From 8db1429bd4e9e2394cd77dc9ca4fdabf32ead1a7 Mon Sep 17 00:00:00 2001 From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com> Date: Thu, 24 Oct 2024 09:09:31 +0000 Subject: [PATCH 4/7] Fix for _ptr --- src/Files.App.CsWin32/Windows.Win32.ComPtr.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs b/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs index 0836c6046ec6..9801271d3abe 100644 --- a/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs +++ b/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs @@ -43,7 +43,7 @@ public readonly ComPtr As(Guid riid) { void* newRawPtr; ComPtr newPtr = default; - ((IUnknown*)ptr_)->QueryInterface(&riid, &newRawPtr); + ((IUnknown*)_ptr)->QueryInterface(&riid, &newRawPtr); newPtr._ptr = (U*)newRawPtr; return newPtr; } From 7ff121c7acd3287dc068a319e4ce55fb6dd13914 Mon Sep 17 00:00:00 2001 From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com> Date: Thu, 24 Oct 2024 18:33:57 +0900 Subject: [PATCH 5/7] Update Windows.Win32.ComPtr.cs --- src/Files.App.CsWin32/Windows.Win32.ComPtr.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs b/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs index 9801271d3abe..6750b9f294d8 100644 --- a/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs +++ b/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs @@ -39,7 +39,7 @@ public ComPtr(T* ptr) } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public readonly ComPtr As(Guid riid) + public readonly ComPtr As(Guid riid) where U : unmanaged { void* newRawPtr; ComPtr newPtr = default; From 04395fb69b0577e487a74891358067d3ba480dad Mon Sep 17 00:00:00 2001 From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com> Date: Thu, 24 Oct 2024 08:44:53 +0000 Subject: [PATCH 6/7] Init --- src/Files.App.CsWin32/Windows.Win32.ComHeapPtr.cs | 2 +- src/Files.App.CsWin32/Windows.Win32.ComPtr.cs | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/Files.App.CsWin32/Windows.Win32.ComHeapPtr.cs b/src/Files.App.CsWin32/Windows.Win32.ComHeapPtr.cs index 14f248ee7ff5..bac9ce4c808f 100644 --- a/src/Files.App.CsWin32/Windows.Win32.ComHeapPtr.cs +++ b/src/Files.App.CsWin32/Windows.Win32.ComHeapPtr.cs @@ -16,7 +16,7 @@ public unsafe struct ComHeapPtr : IDisposable where T : unmanaged private T* _ptr; public bool IsNull - => _ptr == default; + => _ptr == null; public ComHeapPtr(T* ptr) { diff --git a/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs b/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs index d3896fc8fa4e..6750b9f294d8 100644 --- a/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs +++ b/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs @@ -16,7 +16,7 @@ public unsafe struct ComPtr : IDisposable where T : unmanaged private T* _ptr; public bool IsNull - => _ptr == default; + => _ptr == null; public ComPtr(T* ptr) { @@ -38,6 +38,16 @@ public ComPtr(T* ptr) return (T**)Unsafe.AsPointer(ref Unsafe.AsRef(in this)); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public readonly ComPtr As(Guid riid) where U : unmanaged + { + void* newRawPtr; + ComPtr newPtr = default; + ((IUnknown*)_ptr)->QueryInterface(&riid, &newRawPtr); + newPtr._ptr = (U*)newRawPtr; + return newPtr; + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Dispose() { From 1e8ba93a93490e047bc0a59947384c9d968cb8ac Mon Sep 17 00:00:00 2001 From: 0x5BFA <62196528+0x5bfa@users.noreply.github.com> Date: Fri, 25 Oct 2024 02:49:19 +0900 Subject: [PATCH 7/7] Update Windows.Win32.ComPtr.cs --- src/Files.App.CsWin32/Windows.Win32.ComPtr.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs b/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs index 6750b9f294d8..a2617f282cff 100644 --- a/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs +++ b/src/Files.App.CsWin32/Windows.Win32.ComPtr.cs @@ -41,11 +41,9 @@ public ComPtr(T* ptr) [MethodImpl(MethodImplOptions.AggressiveInlining)] public readonly ComPtr As(Guid riid) where U : unmanaged { - void* newRawPtr; - ComPtr newPtr = default; - ((IUnknown*)_ptr)->QueryInterface(&riid, &newRawPtr); - newPtr._ptr = (U*)newRawPtr; - return newPtr; + ComPtr pNewPtr = default; + ((IUnknown*)_ptr)->QueryInterface(&riid, (void**)pNewPtr.GetAddressOf()); + return pNewPtr; } [MethodImpl(MethodImplOptions.AggressiveInlining)]