Entwickler-Ecke

Multimedia / Grafik - MIDI und BASS


ssb-blume - Fr 03.08.18 09:00
Titel: MIDI und BASS
Hallo,

ich hatte eine merkwürdiges Verhalten eines Programms mit Midi-Input. Alles funktioniert,
aber beim Schließen des Programms kam eine Meldung mit dem Fehler:

Programm kann nicht geschlossen werden.

Suche:
Die Midi-Proceduren und alle zentrale Variablen sind in einer Unit "Daten" als "static" definiert.
Die Eingabe wurde vom Microsoft-Hilfe übernommen, die Funktion

"AddSysExBuffer(_midiInHandle, 1024);" war der Verursacher!

Entweder kein static oder auch diese Funktion ganz weglassen beseitigt dann den Fehler!
Soll also der reservierte Platz nicht freigegeben sein? Und wie geht das???
Bei MS steht da nix..

Hansi


Th69 - Fr 03.08.18 09:43

Ich finde nichts zu AddSysExBuffer im Internet (auch nicht direkt in der MSDN). Hast du einen Link dazu?


ssb-blume - Fr 03.08.18 11:42

Hier ist der code:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
       public static void MidiOpenIn(MIDIINPROC _midiInProc)
        {
            int portI = MidiIn.Port;
            inDevice = new MidiInputDevice(portI);

            MIDIError err = radio42.Multimedia.Midi.Midi.MIDI_InOpen(ref _midiInHandle,
                              portI, _midiInProc, IntPtr.Zero, MIDIFlags.MIDI_IO_STATUS);
            if (err == MIDIError.MIDI_OK)
            {
                // supply the device with 2 buffers
//              AddSysExBuffer(_midiInHandle, 1024);
//              AddSysExBuffer(_midiInHandle, 1024);
                err = radio42.Multimedia.Midi.Midi.MIDI_InStart(_midiInHandle);
            }
        }
/*      
        public static void AddSysExBuffer(IntPtr handle, int size)
        {
            MIDI_HEADER header = new MIDI_HEADER(size);
            header.Prepare(true, handle);
            if (header.HeaderPtr != IntPtr.Zero)
            {
                // da hier bei programmende etwas merkwürdiges passiert,
                // wird der puffer nichz zugewiesen.
                // scheint keine auswirkungen auf ergebnis zu haben

//                    radio42.Multimedia.Midi.Midi.MIDI_InAddBuffer(handle, header.HeaderPtr);
            }
        }

diese funktionen stehen in der Dok von 4unseen, bass-dll
Bass.net, radio42..

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Th69 - Fr 03.08.18 13:17

Achso, das ist eine eigene Methode von dir (bzw. aus der Doku übernommen). Da hättest du am besten gleich den Link dazu gepostet: http://bass.radio42.com/help/html/46eb3bc0-b781-fc22-dda6-897a4545a301.htm [http://bass.radio42.com/help/html/46eb3bc0-b781-fc22-dda6-897a4545a301.htm]

Und zu der Fehlermeldung. Lautet diese evtl. vollständig
Zitat:
This program cannot be closed, if it is being debugged, please resume it or close the debugger first.
(bzw. entsprechend in deutsch)?

Bist du das Programm also gerade am Debugger (Haltepunkt) und versuchst es zu schließen?


ssb-blume - Sa 04.08.18 09:32

Nein, der Debugger wurde nicht bemüht, sondern das Programm ohne ihn gestartet und beendet, der Text war ähnlich, aber ohne "Debugger schließen"
Kein Resumee, sondern das Angebot, einen Debugger auswählen und öffnen zur Fehlersuche

Der Eintrag hier war eigendlich gedacht, diesen doch seltenen Fehler bekannt zu machen und die Ursache zu finden.
Wenn die Routinen nicht in "Daten" stehen, sondern direkt in der aufrufend Form, geht ja alles!

Hansi