public static SKData Create(IntPtr address, int length, SKDataReleaseDelegate releaseProc, object context) { var del = releaseProc != null && context != null ? new SKDataReleaseDelegate((addr, _) => releaseProc(addr, context)) : releaseProc; var proxy = DelegateProxies.Create(del, DelegateProxies.SKDataReleaseDelegateProxy, out _, out var ctx); return(GetObject(SkiaApi.sk_data_new_with_proc((void *)address, (IntPtr)length, proxy, (void *)ctx))); }
public static SKData Create(IntPtr address, int length, SKDataReleaseDelegate releaseProc, object context) { if (releaseProc == null) { return(GetObject <SKData> (SkiaApi.sk_data_new_with_proc(address, (IntPtr)length, IntPtr.Zero, IntPtr.Zero))); } else { var ctx = new NativeDelegateContext(context, releaseProc); return(GetObject <SKData> (SkiaApi.sk_data_new_with_proc(address, (IntPtr)length, releaseDelegate, ctx.NativeContext))); } }
public void ReleaseDataWasInvoked() { bool released = false; var onRelease = new SKDataReleaseDelegate((addr, ctx) => { Marshal.FreeCoTaskMem(addr); released = true; Assert.Equal("RELEASING!", ctx); }); var memory = Marshal.AllocCoTaskMem(10); using (var data = SKData.Create(memory, 10, onRelease, "RELEASING!")) { Assert.Equal(memory, data.Data); Assert.Equal(10, data.Size); } Assert.True(released, "The SKDataReleaseDelegate was not called."); }
public static SKData Create(IntPtr address, int length, SKDataReleaseDelegate releaseProc) { return(Create(address, length, releaseProc, null)); }