Skip to content

Commit

Permalink
Marshal callback as function pointer.
Browse files Browse the repository at this point in the history
  • Loading branch information
NN--- committed Feb 9, 2021
1 parent cc4973b commit 13cff6b
Showing 1 changed file with 17 additions and 9 deletions.
26 changes: 17 additions & 9 deletions PInvoke/Ole/Ole32/CtxtCall.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,12 @@ public interface IContextCallback
/// </remarks>
// https://docs.microsoft.com/en-us/windows/win32/api/ctxtcall/nf-ctxtcall-icontextcallback-contextcallback
[PreserveSig]
HRESULT ContextCallback(PFNCONTEXTCALL pfnCallback, in ComCallData pParam, in Guid riid, int iMethod, [In, Optional] IntPtr pUnk);
HRESULT ContextCallback(
[MarshalAs(UnmanagedType.FunctionPtr)] PFNCONTEXTCALL pfnCallback,
in ComCallData pParam,
in Guid riid,
int iMethod,
[In, Optional] IntPtr pUnk);
}

/// <summary/>
Expand All @@ -73,18 +78,21 @@ public struct ComCallData
// https://docs.microsoft.com/en-us/windows/win32/api/ctxtcall/nn-ctxtcall-icontextcallback
[ComImport, Guid("0000034e-0000-0000-C000-000000000046"), ClassInterface(ClassInterfaceType.None)]
public class ContextSwitcher : IContextCallback
{
{
/// <inheritdoc/>
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
public virtual extern HRESULT ContextCallback(
PFNCONTEXTCALL pfnCallback,
in ComCallData pParam,
in Guid riid,
int iMethod,
IntPtr pUnk = new IntPtr());
}
[MarshalAs(UnmanagedType.FunctionPtr)] PFNCONTEXTCALL pfnCallback,
in ComCallData pParam,
in Guid riid,
int iMethod,
IntPtr pUnk = new IntPtr());
}

/// <summary>CLSID_ContextSwitcher</summary>
public static readonly Guid CLSID_ContextSwitcher = new Guid(0x0000034e, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);

/// <summary>IID_ICallbackWithNoReentrancyToApplicationSTA</summary>
public static readonly Guid IID_ICallbackWithNoReentrancyToApplicationSTA = new Guid(0x0a299774, 0x3e4e, 0xfc42, 0x1d, 0x9d, 0x72, 0xce, 0xe1, 0x05, 0xca, 0x57);
}
}

0 comments on commit 13cff6b

Please sign in to comment.