| |
|
|
Sebastian Sprenger | Hallo zusammen, habe hier ein größeres Problem...
1. Ich versuche, von meinem MIDI-Keyboard Daten auszulesen. Klappt eigentlich auch. Aber wenn ich z.B. ein WaitInput weglasse oder ein SetTimer setze (warum ist das mache, ist ne andere Geschichte) und dann eine Taste auf dem Keyboard drücke, stürzt Profan mit einer schweren Zugriffsverletzung und einer Fehlermeldung ohne Text ab, sogar in folgendem Minimalcode!
XProfan 9, Windows ME, 1.8 Ghz KompilierenMarkierenSeparierendeclare hmi&
def midiInOpen(5) !WINMM,midiInOpen
def midiInStart(1) !WINMM,midiInStart
def midiInStop(1) !WINMM,midiInStop
def midiInClose(1) !WINMM,midiInClose
proc MidiInProc
Leer, wohlgemerkt...
endproc
if not(midiInOpen(addr(hmi&),0,procaddr(MidiInProc,5),0,$30020)) CALLBACK_FUNCTION + MIDI_IO_STATUS
if not(midiInStart(hmi&))
cls
whilenot scankey(27)
waitinput
endwhile
midiInStop(hmi&)
endif
midiInClose(hmi&)
endif
2. Falls das 1. Problem nicht lösbar ist... Ich hatte die Routine zum Auslesen der Daten bereits in Assembler geschrieben, das hat perfekt funktioniert. Allerdings bin ich inzwischen auf die Idee gekommen, das Programm nachher zum XProfan-Wettbewerb einzureichen. Darf ich da überhaupt noch dran teilnehmen, wenn ich exakt 100 Bytes Maschinencode für ein Callback in eine Bereichsvariable einbinde und diese Variable an midiInOpen übergebe?
3. Wo ich grad schreibe, was heißt denn das? Warning: Page Restrictor not installed correctly - Headers already sent! Bekomme diese Meldung ständig in der Vorschau.
Gute Nacht, Sebastian |
|
|
| Profan² 7.0e, XProfan 9, 11.2a, FreeProfan32 Windows Vista Home Premium 32-Bit, 2.8 Ghz, 4 GB RAM Windows Me, 1.8 Ghz, 256 MB RAM | 23.09.2007 ▲ |
|
|
|
|
RGH | Zu 1.: XProfan ist nicht in der Lage, zwei Quellcodes in einem Programm parallel auszuführen. Daher kann die Callback-Funktion, so wie Du es programmiert hast, nicht korrekt funktionieren. Die Callbacks in XProfan wurden in erster Linie dazu geschaffen, um API-Funktionen nutzen zu können die Callback-Funktionen nutzen. Da in diesem Fall die XProfan-Callback-Routine aufgerufen wird, während die API-Funktion ausgeführt wird, kommt es zu keinem Konflikt. Nach Beenden der API-Funktion macht XProfan da weiter wo es zuvor unterbrochen wurde, da alle relevanten Systemparameter vor Ausführen der Callback-Funktion gesichert wurden. In anderen Fällen, etwa bei Subclassing von Fenstern, ist der Fast-Mode (siehe unter Set(FastMode,n%)) Pflicht und es muß gewährleistert werden, dass die Callback-Routine keinerlei Unterbrechung, etwa durch WaitInput, Timer, etc. zuläßt. Vielleicht reicht bei Dir ja schon der Fastmode aus. Das mit dem Assembler ist zusätlich sicher auch hilfreich.
Zu 2.: Ich sehe keinen Grund, was bei einem Wettbewerbseintrag gegen Assembler in einer Bereichsvariablen spricht, zumal ja vermutlich die Routine, die diesen Bereich füllt, in XProfan und Teil des Programmes ist.
Gruß Roland
Nachtrag: Möglicherweise wird es in küntigen XProfanversionen erweiterte Callback-Möglichkeiten geben. |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 23.09.2007 ▲ |
|
|
|
|
Jörg Sellmeyer |
Darf ich da überhaupt noch dran teilnehmen, wenn ich exakt 100 Bytes Maschinencode für ein Callback in eine Bereichsvariable einbinde und diese Variable an midiInOpen übergebe?
Da stimme ich Roland zu. Nicht daß ich der Jury vorgreifen möchte, aber was ist besser geeignet, zu zeigen, was mit Profan möglich ist, als das direkte Einbinden von ASM. Gruß Jörg |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 23.09.2007 ▲ |
|
|
|
|
Frank Abbing |
Darf ich da überhaupt noch dran teilnehmen, wenn ich exakt 100 Bytes Maschinencode für ein Callback in eine Bereichsvariable einbinde und diese Variable an midiInOpen übergebe?
Selbstverständlich. XPIA-XProfancodes machen es ja ähnlich. Dort wird sogar eine komplette Assembler-Dll in die Exe eingebunden.
Ich selber benutze für Programm-Callbacks nur noch Assemblercode. |
|
|
| |
|
|
|
Sebastian Sprenger | RGH
zumal ja vermutlich die Routine, die diesen Bereich füllt, in XProfan und Teil des Programmes ist. So ist es.
Wunderbar, vielen Dank für die Antworten! |
|
|
| Profan² 7.0e, XProfan 9, 11.2a, FreeProfan32 Windows Vista Home Premium 32-Bit, 2.8 Ghz, 4 GB RAM Windows Me, 1.8 Ghz, 256 MB RAM | 23.09.2007 ▲ |
|
|
|
|
| Zu den Callbacks: Davon rede ich seit Jahren.
Zum Midi-Keyboard: Genau sowas brauche ich auch sofort her damit!
Zum Page-Restrictor: Die Meldung wird nun nicht mehr gezeigt. (Ich hatte da etwas übersehen) |
|
|
| |
|
|