IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Assemblage .Net (Bass.Net.Dll)


Sujet :

WinDev

  1. #1
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut Assemblage .Net (Bass.Net.Dll)
    Bonsoir à tous !

    J'essai en vain d'utiliser un assemblage .net avec Windev : Bass.Net

    Il permet la gestion de lecture et enregistrement de fichiers audio.

    J'ai un souci avec une des classes : BASS_GetDeviceInfos()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // BASS_ASIO_GetDeviceInfos
    // Valeur de retour :
    //	tableau
     
    [ <Résultat> = ] BASS_ASIO_GetDeviceInfos ()
    J'ai bien compris que cela renvoi dans un tableau mais je ne trouve aucune fonction pour lire ce tableau ???

    Si je fais : Trace(Bass::BASS_GetDeviceInfos())

    j'ai comme erreur : Aucune syntaxe de Trace ne correspond.

    J'arrive à utiliser cet assemblage sous Visualstudio mais pas sous Windev ...

    Merci.

  2. #2
    Membre régulier
    Inscrit en
    Août 2010
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 93
    Points : 95
    Points
    95
    Par défaut
    bonjour

    essaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Trace(TableauVersChaine(Bass::BASS_GetDeviceInfos(),";"))
    :-)

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Quel est le type des données contenues dans le tableau renvoyé par BASS_ASIO_GetDeviceInfos() ?

    Première suggestion:
    Déclarer une variable de type Variant et lui assigner directement le résultat de BASS_ASIO_GetDeviceInfos().

    Le type Variant du WLangage peut "contenir" un tableau. Mais un tableau .NET est-il accessible ?

    Deuxième suggestion:
    Déclarer un tableau dont le type est "compatible" avec celui retourné par BASS_ASIO_GetDeviceInfos().
    Puis utiliser la fonction TableauAjoute() pour y copier les éléments du tableau retourné par BASS_ASIO_GetDeviceInfos().
    Mais j'ai un doute: l'aide en ligne dit que ça ne fonctionne qu'avec des tableaux WLangage.

    Troisième suggestion:
    Si ton cas est désespéré , tu peux envisager d'appliquer la petite "gymnastique" proposée par Elian Lacroix (on y parle d'ActiveX mais la démarche devrait être similaire pour .NET): http://elianlacroix.blogspot.com/200...nant-dune.html

    Donc, tu crées une procédure avec un paramètre sans aucun type, et à l'intérieur de cette procédure tu pourras manipuler directement la valeur de ce paramètre (dans ton cas c'est un tableau).
    Puis, tu exécutes cette procédure en y plaçant directement en paramètre l'appel de la procédure .NET.

    Comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaProcédureGymnastique(BASS_ASIO_GetDeviceInfos())
    Bon courage.
    _

  4. #4
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Merci à tous les deux pour votre aide, je regarde dès que je suis sur mon Windev et je vous donne plus d'infos

  5. #5
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Citation Envoyé par Laurent_m_paris Voir le message
    bonjour

    essaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Trace(TableauVersChaine(Bass::BASS_GetDeviceInfos(),";"))
    :-)
    Déja pour ceci, çà ne fonctionne pas :s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Erreur à la ligne 1 du traitement Clic sur BTN_SansNom1.
    Vous avez appelé la fonction TableauVersChaîne.
    Un élément de type objet .NET ne peut utilisé dans les fonctions TableauVersChaîne() et ChaîneVersTableau().
     
    ----- Informations techniques -----
     
    Projet : trte
     
    Appel WL :
    Traitement de 'Clic sur BTN_SansNom1' (FEN_SansNom1.BTN_SansNom1), ligne 1, thread 0
    Fonction 'TableauVersChaîne', syntaxe 1
     
    Que s'est-il passé ?
    Un élément de type objet .NET ne peut utilisé dans les fonctions TableauVersChaîne() et ChaîneVersTableau().
     
    Code erreur : 2336
    Niveau : erreur fatale (EL_FATAL)
     
    Dump de l'erreur du module 'WD160VM.DLL' (16.0.106.3).
    Identifiant des informations détaillées (.err) : 2336
    Informations de débogage :
    Fonction (0,180)
    Informations supplémentaires :
    EIT_PILEWL :
    Clic sur BTN_SansNom1 (FEN_SansNom1.BTN_SansNom1), ligne 1
    EIT_DATEHEURE : 28/02/2011 21:06:14
     
    Assistance

  6. #6
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Citation Envoyé par =JBO= Voir le message
    Quel est le type des données contenues dans le tableau renvoyé par BASS_ASIO_GetDeviceInfos() ?
    Voici la méthode dans la doc :




    Première suggestion:
    Déclarer une variable de type Variant et lui assigner directement le résultat de BASS_ASIO_GetDeviceInfos().

    Le type Variant du WLangage peut "contenir" un tableau. Mais un tableau .NET est-il accessible ?[/QUOTE]

    On dirait que non ... :s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Recup_Tableau_Bass est un Variant = Bass::BASS_GetDeviceInfos()
     
    Trace(Recup_Tableau_Bass)
    Résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Erreur à la ligne 3 du traitement Clic sur BTN_SansNom1.
    Vous avez appelé la fonction Trace.
    Le passage du paramètre 1 a provoqué une erreur.
    Un élément de type 'tableau (objet .NET)' ne peut pas être converti vers le type 'chaîne'.
    Après comme j'ai dis plus haut, j'arrive à faire ce que je souhaite avec Visualstudio mais pas avec la même méthode, je vous copie/colle le code .NET dès que je peux

    Merci encore :d

    EDIT : Voici le code .net fonctionnel pour lister les sorties audios

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim c_out As Short
            Dim i_out As New BASS_DEVICEINFO()
     
            c_out = 1 ' device 1 = 1st real device
            While Bass.BASS_GetDeviceInfo(c_out, i_out)
                If (i_out.flags And BASSDeviceInfo.BASS_DEVICE_ENABLED) Then ' enabled, so add it...
                    ComboBox_Peripherique_Lecture.Items.Add(Bass.BASS_GetDeviceInfo(c_out)) 'store device #
                End If
                c_out = c_out + 1
            End While
    J'ai tenté de convertir en w-language mais je n'y suis pas arrivé :s je débute la manipulation de DLL avec Windev.

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Merci pour toutes les infos.

    D'après ce que je lis, la fonction BASS_ASIO_GetDeviceInfos() retourne un "vrai" tableau qui contient des références à des objets .NET de type BASS_DEVICEINFO.

    Citation Envoyé par damien.c Voir le message
    Citation Envoyé par =JBO= Voir le message

    Première suggestion:
    Déclarer une variable de type Variant et lui assigner directement le résultat de BASS_ASIO_GetDeviceInfos().

    Le type Variant du WLangage peut "contenir" un tableau. Mais un tableau .NET est-il accessible ?
    On dirait que non ... :s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Recup_Tableau_Bass est un Variant = Bass::BASS_GetDeviceInfos()
     
    Trace(Recup_Tableau_Bass)
    Résultat :

    Erreur à la ligne 3 du traitement Clic sur BTN_SansNom1.
    Vous avez appelé la fonction Trace.
    Le passage du paramètre 1 a provoqué une erreur.
    Un élément de type 'tableau (objet .NET)' ne peut pas être converti vers le type 'chaîne'.
    Eh bien ! Il faudrait mieux décortiquer ce message d'erreur !
    Je crois que nous avons progressé.
    En effet, l'erreur n'est pas sur l'affectation à la variable Recup_Tableau_Bass mais sur la fonction Trace().

    En plus le message d'erreur est encourageant car on peut constater que WinDev "comprend" ce qu'il y a dans le tableau
    Citation Envoyé par Message d'erreur
    Un élément de type 'tableau (objet .NET)'
    Je ne connais pas grand chose à .NET, mais voici un code à tester pour vérifier si on peut accèder à un élément du tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    oDeviceInfo est un BASS_DEVICEINFO
    Recup_Tableau_Bass est un Variant = Bass::BASS_GetDeviceInfos()
     
    // référencer le premier objet du tableau
    oDeviceInfo=Recup_Tableau_Bass[1]
    Si WinDev n'arrive pas à utiliser le tableau d'objet .NET, à la place tu pourrais aisément traduire ton code VB.NET qui manipule directement un objet BASS_DEVICEINFO, sans passer par un tableau.

    Voilà un peu de lecture qui t'aidera:
    Objet .NET
    Instanciation dynamique d'un objet .NET
    _

  8. #8
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Merci grandement pour ton aide =JBO=

    J'ai testé ton code mais j'ai une erreur comme quoi l'opérateur [] est interdit sur ca : oDeviceInfo=Recup_Tableau_Bass[1] :s

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par damien.c Voir le message

    J'ai testé ton code mais j'ai une erreur comme quoi l'opérateur [] est interdit sur ca : oDeviceInfo=Recup_Tableau_Bass[1] :s
    Je viens de lire cette page Utiliser des assemblages .NET dans un projet où il est écrit «Les tableaux d'objets ne sont pas gérés dans cette version».

    Il va falloir traduire ton code VB.NET qui lui ne posera pas de problème.
    _

  10. #10
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    D'accord ! Dommage :s

    Je vais tenter de convertir le .net en w-language alors ^^

    Merci

  11. #11
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Qu'est-ce que c'est que BASSDeviceInfo.BASS_DEVICE_ENABLED.

    Une constante ou une valeur d'un type Enuméré ?

    Pour avancer dans la traduction, le plus simple serait de donner le nombre entier qui correspond à BASSDeviceInfo.BASS_DEVICE_ENABLED.

    Pendant que tu cherches ça, je te prépare un petit brouillon de traduction.
    Ok ?
    _

  12. #12
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Dac je cherche dans la doc

  13. #13
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    EDIT : ARF je me suis trompé !!

    Voici le bon BASS_DEVICE_ENABLED dsl :s


  14. #14
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Tu n'as pas vraiment répondu à la question.

    Mais à la place, tu propose d'utiliser la propriété IsEnabled... Ok !

    Voilà une première idée à tester pour voir si on avance bien:
    Code WLangage : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    PROCEDURE Test_DotNET()
    c_out est un entier sur 4 octets
    i_out est un BASS_DEVICEINFO dynamique
     
    i_out = allouer BASS_DEVICEINFO()
     
    c_out = 1 // device 1 = 1st real device
    TANTQUE Bass::BASS_GetDeviceInfo(c_out, i_out)
        SI i_out:isEnabled ALORS  // enabled, so add it...
            // store device #
            // ici, le code qui récupère l'info à afficher dans le champ Combo
        FIN
        c_out ++
    FIN

    [EDIT]
    Trop tard pour ta correction, je suis parti sur la propriété isEnabled...
    En plus ta super page d'aide du type énuméré BASSDeviceInfo ne donne aucune valeur.
    Je ne vois qu'un moyen, c'est d'afficher cette valeur dans un MsgBox() de ton VB.NET... si tant est que MsgBox() existe toujours , je te rappelle que je n'y connais rien
    [/EDIT]

  15. #15
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    désolé ^^ enfin si cela reviens au même ...

    Si çà ne fonctionne pas avec IsEnabled j’essaierai de modifier pour BASS_DEVICE_ENABLED

    EDIT : ah ok ^^ alors j'ai copier/coller ton code mais je dois faire comment pour renvoyer dans un Trace par exemple pour tester stp ?

    Je dois utiliser Bass::BASS_GetDeviceInfo(c_out) ? Dans un Trace ce n'est pas accepté :s

    merci

  16. #16
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par damien.c Voir le message
    ah ok ^^ alors j'ai copier/coller ton code mais je dois faire comment pour renvoyer dans un Trace par exemple pour tester stp ?

    Je dois utiliser Bass::BASS_GetDeviceInfo(c_out) ? Dans un Trace ce n'est pas accepté :s
    D'abord, ton objet est référencé par i_out.
    La méthode Bass::BASS_GetDeviceInfo() est juste le moyen pour établir cette référence.

    La fonction Trace() doit porter sur i_out. Ok ?

    Et comme je ne connais pas la classe en question...
    dans ta super documentation, quelles sont les propriétés et méthodes de la classe BASS_DEVICEINFO ?
    _

  17. #17
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Voici la classe, les methodes et les propriétés :






  18. #18
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Tu es certain que tout est là ?
    Comme méthode il n'y a pas grand chose.

    Essayons ToString() qui est héritée et surchargée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    PROCEDURE Test_DotNET()
    c_out est un entier sur 4 octets
    i_out est un BASS_DEVICEINFO dynamique
     
    i_out = allouer BASS_DEVICEINFO()
     
    c_out = 1 // device 1 = 1st real device
    TANTQUE Bass::BASS_GetDeviceInfo(c_out, i_out)
        SI i_out:IsEnabled ALORS  // enabled, so add it...
            // store device #
            Trace(i_out:ToString())
        FIN
        c_out ++
    FIN

  19. #19
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut


    Réponse en image Ca marche bien

    Merci =JBO=

  20. #20
    Membre confirmé
    Profil pro
    Freelance
    Inscrit en
    Avril 2003
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Avril 2003
    Messages : 393
    Points : 492
    Points
    492
    Par défaut
    Salut,

    Essaye avec ca, ca devrait etre bon normalement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DeviceInfo est un tableau de 0 BASS_DEVICEINFO = Bass::BASS_GetDeviceInfos()
    i est un entier
    POUR i=1 A Dimension(DeviceInfo)
    	NomDevice est une chaîne=DeviceInfo[i]:name
    FIN
    A+
    Vince

Discussions similaires

  1. Quel langage entre vb.net c#.net c++.net java ?
    Par heeedi dans le forum Débuter
    Réponses: 7
    Dernier message: 13/12/2008, 21h53
  2. Participez à la F.A.Q .NET ASP.NET Delphi.NET
    Par Jérôme Lambert dans le forum Contribuez
    Réponses: 0
    Dernier message: 05/12/2008, 00h00
  3. Participez à la F.A.Q .NET ASP.NET VB.NET
    Par Jérôme Lambert dans le forum Contribuez
    Réponses: 0
    Dernier message: 05/12/2008, 00h00
  4. [visual.net] creer une DLL du projet - question cruciale
    Par igorzup dans le forum Visual Studio
    Réponses: 3
    Dernier message: 09/11/2005, 11h30
  5. Réponses: 16
    Dernier message: 22/03/2005, 21h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo