Autor Beitrag
ssb-blume
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 369
Erhaltene Danke: 7

XP, W7, W8
Deutschland
BeitragVerfasst: Fr 03.08.18 09:00 
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

_________________
Brain: an apparatus with which we think we think.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4050
Erhaltene Danke: 838

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 369
Erhaltene Danke: 7

XP, W7, W8
Deutschland
BeitragVerfasst: Fr 03.08.18 11:42 
Hier ist der code:
ausblenden 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

_________________
Brain: an apparatus with which we think we think.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4050
Erhaltene Danke: 838

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: 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

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 369
Erhaltene Danke: 7

XP, W7, W8
Deutschland
BeitragVerfasst: 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

_________________
Brain: an apparatus with which we think we think.