#if DESKTOP_APP using System; using System.Runtime.InteropServices; namespace SharpDX.MediaFoundation { internal class CaptureEngineOnEventCallbackShadow : SharpDX.ComObjectShadow { private static readonly CaptureEngineOnEventCallbackVtbl Vtbl = new CaptureEngineOnEventCallbackVtbl(); /// /// Return a pointer to the unmanaged version of this callback. /// /// The callback. /// A pointer to a shadow c++ callback public static IntPtr ToIntPtr(CaptureEngineOnEventCallback callback) { return ToCallbackPtr(callback); } public class CaptureEngineOnEventCallbackVtbl : ComObjectVtbl { public CaptureEngineOnEventCallbackVtbl() : base(1) { AddMethod(new OnEventCallback(OnEventImpl)); } /// HRESULT IMFCaptureEngineOnEventCallback::OnEvent([In] IMFMediaEvent* pEvent) [UnmanagedFunctionPointer(CallingConvention.StdCall)] private delegate int OnEventCallback(IntPtr thisPtr, IntPtr mediaEvent); private static int OnEventImpl(IntPtr thisPtr, IntPtr mediaEvent) { try { var shadow = ToShadow(thisPtr); var callback = (CaptureEngineOnEventCallback)shadow.Callback; var eventRef = new MediaEvent(mediaEvent); callback.OnEvent(eventRef); } catch (Exception exception) { return (int)SharpDX.Result.GetResultFromException(exception); } return Result.Ok.Code; } } protected override CppObjectVtbl GetVtbl { get { return Vtbl; } } } } #endif