ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Forum AtoutFox : Callback function winapi WINMM midiinopen   

Sujet

rss Flux RSS des derniers messages

Vous devez vous identifier pour pouvoir poser une question ou répondre.

jeu. 17 juin 2021, 09h30

janflorijn
Pays-Bas Pays-Bas

atoutfox.public.association

Callback function winapi WINMM midiinopen

Bonjour,

Je travaille sur un programme pour traiter l'entrée midi. J'utilise WINAPI winmm midiinopen+start. Il est possible d'ouvrir un périphérique midi in. Le programme utilise alors la fonction de rappel définie. C'est positif. Après cela, la fonction de rappel cesse de répondre. Je n'ai pas non plus de message d'erreur. Voici mon exemple de code. Qui peut m'aider?

Declare INTEGER midiInStart In Winmm integer hmi
Declare INTEGER midiInOpen In Winmm;
  INTEGER @lphmi, INTEGER uDeviceID ,;
  INTEGER dwCallback, INTEGER dwCallbackInstance, INTEGER dwFlags
#INCLUDE vfp2c.h
SET LIBRARY TO vfp2c32.fll ADDITIVE && Library with callback funtion
PUBLIC loCallback AS object, nDevice AS integer
loCallBack = CREATEOBJECT('cls_callback')
nDevice=nChosenMidiInDevice-1 && index midi input device 1 based, WINAPI is 0 based!
ON ERROR errorhandling() && To detect errors I added errorhandling
nResult_open_midi_in = midiInOpen(@hDevice,nDevice, loCallBack.Address,0, CALLBACK_FUNCTION) && Adviced is CALLBACK_FUNCTION OR MIDI_IOSTATUS
&& At startup previous line does use/execute callback
MESSAGEBOX(STR(nResult_open_midi_in))  &&Returns at startup "0".
nResult_midi_in_start = midiInStart(hDevice)
MESSAGEBOX(STR(nResult_midi_in_start)) &&Returns at startup: "0".
READ EVENTS
DEFINE CLASS cls_callback AS custom &&class with callback. Other baseclass?
&& DEFINE CLASS cls_callback AS Session
&& DEFINE CLASS cls_callback AS Exception
  Address = 0

  FUNCTION Init
    THIS.Address = CreateCallbackFunc('Test_Callback_function','BOOL','INTEGER,INTEGER,INTEGER,INTEGER,INTEGER',THIS)
  ENDFUNC

  FUNCTION Destroy
    IF THIS.Address != 0
      DestroyCallbackFunc(THIS.Address)
    ENDIF
  ENDFUNC

  FUNCTION Test_Callback_function(hDevice,iMsg,dwinstance,lParam1,lParam2) && Or @hDevice
    DO CASE
      CASE iMsg=MIM_DATA
        _VFP.AutoYield = .F.
        MESSAGEBOX("Data: Callback function used for data input.")
        _VFP.AutoYield = .T.
      CASE iMsg=MIM_OPEN
        _VFP.AutoYield = .F.
        MESSAGEBOX("Open: Callback function used to open device.")
        _VFP.AutoYield = .T.
      CASE iMsg=MIM_MOREDATA
        _VFP.AutoYield = .F.
        MESSAGEBOX("More: Callback received again input.")
        _VFP.AutoYield = .T.
      OTHERWISE
        _VFP.AutoYield = .F.
        MESSAGEBOX("Other. Return value:"+CHR(13)+STR(iMsg))
        _VFP.AutoYield = .T.
    ENDCASE
  ENDFUNC
ENDDEFINE


Salutions,


Jan Flikweert

Permalink : http://www.atoutfox.org/nntp.asp?ID=0000019883
19 855 messages dans le forum • Liste complète des messages

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2021.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3