Merci bien Médinoc,
J'ai rectifié le code.
je suis toujours planté par un Storage_Error ceci dis.
Version imprimable
Merci bien Médinoc,
J'ai rectifié le code.
je suis toujours planté par un Storage_Error ceci dis.
Bonjour,
N'étant pas une flèche en math, j'ai opté pour une autre solution afin de formater le long.
Mai par contre je ne sais si je doit me retrouver pour un message "(0x90, 60, 100)" avec 100060144 ou 144060100.
Merci pour vos réponses.
Pm_Message(0x90, 60, 100) équivaut à Pm_Message(0x90, 0x3C, 0x64), qui doit donner 0x00643C90 (ou 6569104 en décimal)
Bonjour,
J'ai réussis à formater mon message.
Mais a priori, j'ai toujours un problème avec l'objet PortMidiStream.
Merci encore. @+
Bonjour,
Comme j'en avez l'intuition, la fonction OpenOutput modifie le paramètre PortMidiStream.
Comme avec Ada il est impossible de le faire, j'ai contourné le problème avec un petit code C que voici :
Je récupère mon adresse et le tour est joué.Code:
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
30 #include <stdio.h> #include <portmidi.h> #include <porttime.h> #define DRIVER_INFO NULL #define OUTPUT_BUFFER_SIZE 0 #define TIME_PROC ((long (*)(void *)) Pt_Time) #define TIME_INFO NULL #define TIME_START Pt_Start(1, 0, 0) /* timer started w/millisecond accuracy */ long latency = 0; PmStream * midi; int Open_Handler (int device) { TIME_START; Pm_OpenOutput(&midi, device, DRIVER_INFO, OUTPUT_BUFFER_SIZE, (latency == 0 ? NULL : TIME_PROC), (latency == 0 ? NULL : TIME_INFO), latency); return midi; }
Merci pour votre aide :ccool:
Heu... Comment ça, impossible en Ada ??? Et les modificateurs "In Out", alors, ils servent à décorer le sapin de Noël ? ;)
Donc, tout comme dans les mauvais langages, il est impossible d'avoir un élément de programme qui peut à la fois modifier des trucs et retourner une valeur?
Enfin au moins dans ton cas, tu devrais toujours pouvoir remplacer la fonction par une procédure et sa valeur de retour par un autre paramètre in/out...
Désolé si je parais désagréable, mais vouloir m'expliquer l'Ada ou le Pascal, c'est peut-être "un peu" gonflé... Si je te dis que "In Out" règle ton problème, c'est parce que c'est le cas.
Essaie ce code, tu verras bien :Quand je te dis que les passages par référence existent en Ada, ce n'est pas une supposition, c'est une certitude...Code:
1
2
3
4 Procedure Inc ( B : In Out Integer ) is Begin B:=B+1; End Inc ;
Bien sûr que non. De ce point de vue, Ada fonctionne à l'identique de Pascal et C : le passage par défaut est fait par valeur, et il faut expliciter les passages par référence (modificateur "Var" en Pascal, et "*"+"&" en C).
Ok !
je suis près à prendre une leçon ...
Comment importes tu cette fonction :
Code:
1
2
3
4
5
6
7 PmError Pm_OpenInput( PortMidiStream** stream, PmDeviceID inputDevice, void *inputDriverInfo, long bufferSize, PmTimeProcPtr time_proc, void *time_info );
Comme ça :Bien sûr, il faut adapter les types composés (PmError, PmDeviceID, PortMidiStream) en conséquence.Code:
1
2
3
4
5
6
7 Function Pm_OpenInput ( stream : In Out PortMidiStream ; inputDevice : PmDeviceID ; inputDriverInfo : In Out System.Address ; bufferSize : Long_Integer ; time_proc : System.Address ; -- Est en fait un pointeur de fonction, attention... time_info : In Out System.Address ) Return PmError ;