Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3142 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [Résolut]Traduction du C++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolut]Traduction du C++

n°1913449
The matrix
Chacun fait ce qu'il en veut.
Posté le 10-08-2009 à 14:32:24  profilanswer
 

Bonjour,
 
Je souhaite utiliser une bibliothèque avec C++  avec Ada et je dois importer chaque function.
Pour info il s'agit de la bibliothèque libportmidi.
 
Dans le portmidi.h je trouve une fonction :
 

Code :
  1. PmError Pm_OpenOutput( PortMidiStream** stream,
  2.                 PmDeviceID outputDevice,
  3.                 void *outputDriverInfo,
  4.                 long bufferSize,
  5.                 PmTimeProcPtr time_proc,
  6.                 void *time_info,
  7.                 long latency );


 
Dont je voudrai connaître le type de données attendu ligne 3 et 6 s'il vous plaît, Merci.


Message édité par The matrix le 12-08-2009 à 20:33:14

---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
mood
Publicité
Posté le 10-08-2009 à 14:32:24  profilanswer
 

n°1913470
Elmoricq
Modérateur
Posté le 10-08-2009 à 15:03:21  profilanswer
 

Voir la documentation de la bibliothèque. Le type "void*" est un pointeur générique.

n°1913509
The matrix
Chacun fait ce qu'il en veut.
Posté le 10-08-2009 à 15:36:01  profilanswer
 

Merci Elmoricq.


---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
n°1913784
The matrix
Chacun fait ce qu'il en veut.
Posté le 11-08-2009 à 02:06:03  profilanswer
 

Salutations, bien ?
j'en ai un autre à traduire qui est ::= typedef void PortMidiStream.
Pour l'instant j'ai tradui par le type System.Address;  Mais ça tourne pas.
Merci !


---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
n°1913804
The matrix
Chacun fait ce qu'il en veut.
Posté le 11-08-2009 à 08:53:58  profilanswer
 

Bonjour, pour le type ci dessus, je me suis arangé avec des gens bien sympa, qui bosse la nuit, et qui font pas semblant comme certain ici  [:frag_facile]  
 
Bref !  [:dawa_neowen]  
 
j'ai déclaré un type record null; end record, j'ai instancié System.Address_To_Access_Conversions avec.
J'ai déclaré un pointeur sur un record que j'ai initialisé et je passe l'adresse de l'objet.
Ingénieux non ....   [:dawa_neowen]


Message édité par The matrix le 11-08-2009 à 08:54:34

---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
n°1913816
Elmoricq
Modérateur
Posté le 11-08-2009 à 09:07:35  profilanswer
 

Hm. Ici c'est un forum, pas un repaire de psychopathes qui fournissent un support 24h/24.

n°1913818
The matrix
Chacun fait ce qu'il en veut.
Posté le 11-08-2009 à 09:10:25  profilanswer
 

Elmoricq a écrit :

Hm. Ici c'est un forum, pas un repaire de psychopathes qui fournissent un support 24h/24.


[:rofl] Psychomachin... je le répéterais pas, mais c'est tentant  :o  


---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
n°1913869
The matrix
Chacun fait ce qu'il en veut.
Posté le 11-08-2009 à 10:51:52  profilanswer
 

Si je mettais les valeurs suivantes : (0x90, 60, 100)
Dans cette variable : long Message;
les la manière suivante :

Code :
  1. #define Pm_Message(status, data1, data2) \
  2.         ((((data2) << 16) & 0xFF0000) | \
  3.          (((data1) << 8) & 0xFF00) | \
  4.          ((status) & 0xFF))


Obtiendrais-je cet entier : 100601440 ?
Ou cellui-ci : 144060100 ?
S'il vous plaît ? Merci !

Message cité 1 fois
Message édité par The matrix le 11-08-2009 à 10:55:26

---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
n°1913876
The matrix
Chacun fait ce qu'il en veut.
Posté le 11-08-2009 à 11:03:06  profilanswer
 

Ca arrive souvant les double_fault ?
 
Parait que c'est soit ça, soit un device qu'est pas là ou il devrait être.
 
Je suis embêté là ! :/


---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
n°1914022
The matrix
Chacun fait ce qu'il en veut.
Posté le 11-08-2009 à 15:32:42  profilanswer
 

The matrix a écrit :

Si je mettais les valeurs suivantes : (0x90, 60, 100)
Dans cette variable : long Message;
les la manière suivante :

Code :
  1. #define Pm_Message(status, data1, data2) \
  2.         ((((data2) << 16) & 0xFF0000) | \
  3.          (((data1) << 8) & 0xFF00) | \
  4.          ((status) & 0xFF))


Obtiendrais-je cet entier : 100601440 ?
Ou cellui-ci : 144060100 ?
S'il vous plaît ? Merci !


 
 
 
Up !  
Vous avez pas une petite idée ? s'il vous plaît ?  
100060144 ou 144060100
 
Merci !


Message édité par The matrix le 11-08-2009 à 15:33:19

---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
mood
Publicité
Posté le 11-08-2009 à 15:32:42  profilanswer
 

n°1914260
The matrix
Chacun fait ce qu'il en veut.
Posté le 12-08-2009 à 10:42:33  profilanswer
 

Up !
 
S'il vous plaît, merci. Bonnes journées.


---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
n°1914262
alexandre_​j
Posté le 12-08-2009 à 10:47:52  profilanswer
 

J'en ai pas la moindre idée. Mais tu ne peux pas tester ? Genre afficher le résultat ?

n°1914275
The matrix
Chacun fait ce qu'il en veut.
Posté le 12-08-2009 à 11:02:57  profilanswer
 

alexandre_j a écrit :

J'en ai pas la moindre idée. Mais tu ne peux pas tester ? Genre afficher le résultat ?


 
Yep !
 
C'était une idée !
 
Alors, j'ai fait ça :

Code :
  1. #include <portmidi.h>
  2. #include <stdio.h>
  3.  
  4. int main (void) {
  5.  printf("%i", Pm_Message(0x90, 60, 100));
  6. }


 
Est ça donne "6569104" Rien à voir avec mes résultats... :fou:  


---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
n°1914444
Joel F
Real men use unique_ptr
Posté le 12-08-2009 à 15:44:42  profilanswer
 

montre ton code

Message cité 1 fois
Message édité par Joel F le 12-08-2009 à 15:45:12
n°1914459
The matrix
Chacun fait ce qu'il en veut.
Posté le 12-08-2009 à 15:58:23  profilanswer
 

Joel F a écrit :

montre ton code


Ste plais !


---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
n°1914460
The matrix
Chacun fait ce qu'il en veut.
Posté le 12-08-2009 à 15:59:52  profilanswer
 

Code :
  1. function Hex_Image(Num : Integer) return String is
  2.      Image : String(1..9);
  3.      Last  : Positive := 9;
  4.      Number : Integer := num;
  5.      type Hexa_Digit is
  6.        ('0', '1', '2', '3', '4', '5', '6', '7',
  7.         '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
  8.  
  9.      Rest : Integer;
  10.   begin
  11.      loop
  12.  
  13.         Rest := (Number rem 16);
  14.         image(Last) := Character'Value(Hexa_Digit'image(Hexa_Digit'val((Rest))));
  15.         number := Number - rest;
  16.  
  17.         Last := Last - 1;
  18.         exit when (Number rem 16) = 0;
  19.      end loop;
  20.      image(Last) := Character'Value(Hexa_Digit'image(Hexa_Digit'val(Number/16)));
  21.      return Image(Last..Image'length);
  22.   end Hex_Image;
  23.  
  24.  
  25.  
  26.   type String_Access is access String;
  27.  
  28.  
  29.   File : Text_Io.File_Type;
  30.   Filename : constant String := "Harmonie.tmp";
  31.   Last : Natural;
  32.   function Pm_Message(Message : T_Message) return Interfaces.C.Long is
  33.  
  34.      Result : Interfaces.C.Long := 0;
  35.  
  36.      Hexa_String : String_Access := new String '
  37.        ( Hex_Image(Message.Data2) &
  38.         Hex_Image(Message.Data1) &
  39.          Hex_Image(Message.Status));
  40.   begin
  41.      Text_Io.Put_Line("Status : " & Hex_Image(Message.Status));
  42.      Text_Io.Put_Line("Data1 : " & Hex_Image(Message.Data1));
  43.      Text_Io.Put_Line("Data2 : " & Hex_Image(Message.Data2));
  44.      Text_Io.Create(File, Out_File, Filename);
  45.      Text_Io.Put(File, "16#" & Hexa_String.all & '#');
  46.      Text_Io.Close(File);
  47.      Text_Io.Open(File, In_File, Filename);
  48.      Long_io.Get(File, Result);
  49.      return Result;
  50.   end Pm_Message;


---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
n°1914465
The matrix
Chacun fait ce qu'il en veut.
Posté le 12-08-2009 à 16:06:29  profilanswer
 

Voici pour l'import du portmidi.h
 

Code :
  1. with Porttime;
  2. with System;
  3. with Interfaces.C;
  4. with System.Address_To_Access_Conversions;
  5. package Portmidi is
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.   type PmError is (pmNoErro,
  13.                    PmHostError,
  14.                    pmInvalidDeviceId,
  15.                    pmInsufficientMemory,
  16.                    pmBufferTooSmall,
  17.                    pmBufferOverflow,
  18.                    pmBadPtr,
  19.                    pmBadData,
  20.                    pmInternalError,
  21.                    PmBufferMaxSize);
  22.  
  23.   type T_PortMidiStream is
  24.     record
  25.        null;
  26.     end record;
  27.  
  28.  
  29.  
  30.  
  31.  
  32.   package Pm_Stream_Conversion is new System.Address_To_Access_Conversions(T_PortMidiStream);
  33.   use Pm_Stream_Conversion;
  34.  
  35.  
  36.   type T_ErrorText is new Interfaces.C.Char_Array(0..10);
  37.  
  38.   function Pm_GetErrorText( Errnum : PmError  ) return T_ErrorText;
  39.   Pragma Import (C, Pm_GetErrorText, "Pm_GetErrorText" );
  40.  
  41.   type DeviceInfo is
  42.      record
  43.         StructVersion : Integer;
  44.         Interf : System.address;
  45.         Name : System.Address;
  46.         Input : Integer;
  47.         Output : Integer;
  48.         Opened : integer;
  49.      end record;
  50.  
  51.  
  52.   package DeviceInfo_Conversion is new System.Address_To_Access_Conversions(DeviceInfo);
  53.   use DeviceInfo_Conversion;
  54.  
  55.  
  56.   function Pm_HasHostError( PortMidiStream : System.address) return Interfaces.C.Int;
  57.   pragma Import (C, Pm_HasHostError, "Pm_HasHostError" );


 
Voici l'utilisation de portmidi
 

Code :
  1. Pm_Error : PmError;
  2.  
  3.   PortMidiStream_Ptr : Pm_Stream_Conversion.Object_Pointer :=
  4.     new T_PortMidiStream;
  5.  
  6.   OutputDriverInfo_Ptr,
  7.   Time_Info_Ptr : System.Address := Null_Address;
  8.  
  9.  
  10.   Current_DeviceInfo : DeviceInfo;
  11.  
  12.   Device : Natural;
  13.  
  14.   Pt_Error : PtError;
  15.   Resolution : Integer := 1;
  16.   PtCallback,
  17.   UserData : System.Address := Null_Address;
  18.  
  19.   Pm_Event : PmEvent;
  20.  
  21.   Content : T_Message := (16#90#, 60, 100);
  22.  
  23.   Char : Character;
  24.  
  25.   package Long_Io is new Ada.Text_Io.Integer_Io(Interfaces.C.Long);
  26.  
  27. begin
  28.   Pt_Error := Pt_Start(Resolution, PtCallback, UserData);
  29.   Pm_Error := Pm_Initialize;
  30.   New_Line;
  31.   for I in 0..Pm_CountDevices-1 loop
  32.      Current_DeviceInfo := DeviceInfo_Conversion.To_Pointer(Pm_GetDeviceInfo(I)).all;
  33.      if Current_DeviceInfo.Output /= 0 then
  34.         Put(I);
  35.         Put_Line(" : " & To_Ada(To_Pointer(Current_DeviceInfo.Name).all));
  36.      end if;
  37.   end loop;
  38.   New_Line;
  39.  
  40.   Put("Choose device : " );
  41.   Get(Device);
  42.   Pm_Error := Pm_OpenOutput(PortMidiStream => Pm_Stream_Conversion.To_Address(PortMidiStream_Ptr),
  43.  
  44.                             OutputDevice => device,
  45.                             outputDriverInfo => OutputDriverInfo_ptr,
  46.                             BufferSize => 0,
  47.                             Time_Proc => Pt_Time'access,
  48.                             Time_Info => Time_Info_Ptr,
  49.                             latency => 50);
  50.  
  51.   Put_line("Pm_OpenOutput... Ok !" );
  52.   --Put_Line("Address_Image : " & System.Address_Image(Pm_Stream_Conversion.To_Address(PortMidiStream_Ptr)));
  53.   if Pm_HasHostError(Pm_Stream_Conversion.To_Address(PortMidiStream_Ptr)) /= 0 then
  54.  
  55.      Put_line(To_Ada(Pm_GetErrorText(Pm_Error)));
  56.   else
  57.  
  58.      Put_line("PortMidiStream... Ok !" );
  59.   end if;


 
L'exécution s'arrête sur la Pm_HasHostError.
 
Merci pour votre aide.  :jap:


---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [Résolut]Traduction du C++

 

Sujets relatifs
utilisation d'un librairie C avec Ada.[Divers][Lecture]Utilisation de la bibliothèque portmidi : Pm_Read()
svn: 'C:\machin is already a working copy for a different URLC++ fonction d'une ligne : besoin d'accolades ?
C++1xCOM C++/VB6 tableau de string en argument
(aidez moi c simple) aller de matlab vers Cmatlab et C++
[C]Connexion et récupération de fichier via ftp en CConversion JPEG -> BMP en C++
Plus de sujets relatifs à : [Résolut]Traduction du C++


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR