internal GCHandle SetSenseEventCallback(Csound6.SenseEventCallbackProxy callback) { GCHandle gch = FreezeCallbackInHeap(callback); Csound6.NativeMethods.csoundRegisterSenseEventCallback(csound, callback); return(gch); }
/// <summary> /// Registers a callback proxy (below) that transforms csound callbacks into .net events. /// </summary> /// <param name="callback"></param> /// <returns></returns> internal void SetSenseEventCallback <T>(Action <T> callback, T userData) where T : class { Csound6.SenseEventCallbackProxy cb = new Csound6.SenseEventCallbackProxy((csd, ptr) => { GCHandle handle = GCHandle.Alloc(userData, GCHandleType.Pinned); IntPtr p = (IntPtr)handle; ptr = p; callback?.Invoke(userData); handle.Free(); }); GCHandle gch = FreezeCallbackInHeap(callback); Csound6.NativeMethods.csoundRegisterSenseEventCallback(csound, cb); //return gch; }