Skip to content

Commit

Permalink
Revert using ComPtr<T>
Browse files Browse the repository at this point in the history
  • Loading branch information
shmuelie committed Aug 29, 2024
1 parent 9669f42 commit 6354f06
Showing 1 changed file with 14 additions and 5 deletions.
19 changes: 14 additions & 5 deletions src/Shmuelie.WinRTServer/Internal/BaseClassFactoryWrapper.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
using System;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.Marshalling;
using Shmuelie.WinRTServer.Internal.Windows;
using Shmuelie.WinRTServer.Windows.Com;
using Windows.Win32.Foundation;
using static Windows.Win32.PInvoke;
Expand All @@ -24,23 +23,26 @@ public unsafe HRESULT CreateInstance(void* pUnkOuter, Guid* riid, void** ppvObje
return HRESULT.E_NOINTERFACE;
}

bool shouldReleaseUnknown = false;
nint unknown = 0;
try
{
var instance = factory.CreateInstance();
using ComPtr<IUnknown> unknown = default;
unknown.Attach((IUnknown*)comWrappers.GetOrCreateComInterfaceForObject(instance, CreateComInterfaceFlags.None));
unknown = comWrappers.GetOrCreateComInterfaceForObject(instance, CreateComInterfaceFlags.None);

if (riid->Equals(IUnknown.IID_Guid))
{
unknown.CopyTo((IUnknown**)ppvObject);
*ppvObject = (void*)unknown;
}
else
{
var hr = (HRESULT)unknown.CopyTo(riid, ppvObject);
var hr = (HRESULT)Marshal.QueryInterface(unknown, ref *riid, out nint ppv);
shouldReleaseUnknown = true;
if (hr.Failed)
{
return hr;
}
*ppvObject = (void*)ppv;
}

factory.OnInstanceCreated(instance);
Expand All @@ -49,6 +51,13 @@ public unsafe HRESULT CreateInstance(void* pUnkOuter, Guid* riid, void** ppvObje
{
return (HRESULT)Marshal.GetHRForException(e);
}
finally
{
if (shouldReleaseUnknown)
{
Marshal.Release(unknown);
}
}
return HRESULT.S_OK;
}

Expand Down

0 comments on commit 6354f06

Please sign in to comment.