| |
|
|
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 per ein Callback in un Bereichsvariable einbinde und diese Variable an midiInOpen übergebe?
3. Wo ich grad schreibe, was è 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 corsa wird, kommt es zu no 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 presumibilmente die Routine, die diesen Bereich füllt, in XProfan und Teil des Programmi ist.
Saluto 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 per ein Callback in un 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 possibile ist, als das direkte Einbinden von ASM. Saluto 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 per ein Callback in un 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 per Programm-Callbacks nur noch Assemblercode. |
|
|
| |
|
|
|
Sebastian Sprenger | RGH
zumal ja presumibilmente die Routine, die diesen Bereich füllt, in XProfan und Teil des Programmi ist. So ist es.
Wunderbar, vielen Dank per 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) |
|
|
| |
|
|