コード例 #1
0
    internal GCHandle SetSenseEventCallback(Csound6.SenseEventCallbackProxy callback)
    {
        GCHandle gch = FreezeCallbackInHeap(callback);

        Csound6.NativeMethods.csoundRegisterSenseEventCallback(csound, callback);
        return(gch);
    }
コード例 #2
0
    /// <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;
    }