Beispiel #1
0
        private ReportErrorCB m_error_cb;                 // Reference to callback

        public Audio()
        {
            if (!ModuleLoaded)
            {
                throw new Exception("Audio.dll has not been loaded");
            }

            m_dispatcher = Dispatcher.CurrentDispatcher;
            m_thread_id  = Thread.CurrentThread.ManagedThreadId;

            // Initialise audio
            var           init_error = (string?)null;
            ReportErrorCB error_cb   = (ctx, msg) => init_error = msg;

            m_context = Audio_Initialise(error_cb, IntPtr.Zero);
            if (m_context == HContext.Zero)
            {
                throw new Exception(init_error ?? "Failed to initialised Audio");
            }

            // Attach the global error handler
            m_error_cb = (ctx, msg) =>
            {
                if (m_thread_id != Thread.CurrentThread.ManagedThreadId)
                {
                    m_dispatcher.BeginInvoke(m_error_cb, ctx, msg);
                }
                else
                {
                    Error?.Invoke(this, new MessageEventArgs(msg));
                }
            };
            Audio_GlobalErrorCBSet(m_error_cb, IntPtr.Zero, true);
        }
Beispiel #2
0
 [DllImport(Dll)] private static extern void     Audio_GlobalErrorCBSet(ReportErrorCB error_cb, IntPtr ctx, bool add);
Beispiel #3
0
 // Initialise / shutdown the dll
 [DllImport(Dll)] private static extern HContext Audio_Initialise(ReportErrorCB initialise_error_cb, IntPtr ctx);