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

C++/CLI Discussion :

[C#] Comment wrapper une dll ?


Sujet :

C++/CLI

  1. #1
    Membre actif
    Avatar de Blo0d4x3
    Inscrit en
    Octobre 2003
    Messages
    583
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 583
    Points : 265
    Points
    265
    Par défaut [C#] Comment wrapper une dll ?
    Salut tous, je voudrais jouer du son dans mon application, je souhaiterais utiliser la fonction sndplaysound. Je fais donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public enum fuSound       
    		{
    			SND_SYNC = 0,
    			SND_ASYNC = 1,
    			SND_NODEFAULT = 2,
    			SND_MEMORY = 4,
    			SND_LOOP = 8
    		};
     
    [DllImport("winmm.dll")]
    public static extern bool sndPlaySound(string lpszSound, fuSound fuSound );
    J'apelle la fonction comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bool result = sndPlaySound("D:\\Sons\\ar3_pkup.wav", fuSound.SND_SYNC);
    Et ca me sort une execption me disant impossible de trouver le point d'entré de la fonction sndplaysound dans winmm.dll.
    J'ai cette même erreur pour d'autre fonction comme playsound et mciExecute.
    Après plusieurs recherches sur le net, je tombe toujours sur la même réponse comme quoi ces fonctions sont bien déclarées dans la dll winmm ou Coredll.dll(qui n'est pas présente dans mon système (Win XP)). . Je me trompe de dll ou ma déclaration est fausse?

    Merci.

  2. #2
    Membre actif Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Points : 272
    Points
    272
    Par défaut
    J'avoue que je ne vois pas d'où peut venir l'erreur... De ton PC sûrement parce que je viens de tester ce code :
    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
    29
    using System;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
     
    namespace TestSon
    {
        class Program
        {
     
            public enum fuSound
            {
                SND_SYNC = 0,
                SND_ASYNC = 1,
                SND_NODEFAULT = 2,
                SND_MEMORY = 4,
                SND_LOOP = 8
            };
     
            [DllImport("winmm.dll")]
            public static extern bool sndPlaySound(string lpszSound, fuSound fuSound); 
     
            static void Main(string[] args)
            {
                sndPlaySound(@"C:\Documents and Settings\DeusXL\Mes documents\Visual Studio Projects\Doppler\boom.wav", 
                    fuSound.SND_SYNC); 
            }
        }
    }
    Et ça marche très bien ! Essayes chez toi un nouveau projet avec ça pour voir.
    Pourrais-tu être plus précis sur l'erreur à la limite ?
    ( quand elle arrive précisément, quelle allure elle a... )

  3. #3
    Membre actif
    Avatar de Blo0d4x3
    Inscrit en
    Octobre 2003
    Messages
    583
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 583
    Points : 265
    Points
    265
    Par défaut
    Curieux....

    J'ai créé un projet avec une winform. Lorsque je clique sur un bouton sa apelle la methode snplaysound:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private void button1_Click(object sender, System.EventArgs e)
    		{
    			try
    			{
    				//bool result = WinmmWrapper.mciExecute("play D:\\Sons\\ar3_pkup.wav");
    				bool result = WinmmWrapper.sndPlaySound("D:\\Sons\\ar3_pkup.wav", WinmmWrapper.fuSound.SND_ASYNC );
    				MessageBox.Show(result.ToString(), "essai", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    			}
    			catch(Exception ex)
    			{
    				MessageBox.Show(ex.Message, "essai", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    			}
    		}
    Et je tombe dans le catch. m'affichant que le point d'entrè de la fonction sndplaysound et introuvable. Même erreur pour mciExecute.

    Mon fonction sont compilé dans un dll a par. J'ai bien sur ajouter les reférences dans ma winfom.
    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
     
    namespace WrappersWin32
    {
    	/// <summary>
    	/// Description résumée de Winmm.
    	/// </summary>
    	public class WinmmWrapper
    	{
    [DllImport("winmm.dll")]
    		public static extern bool sndPlaySound(string lpszSound, fuSound fuSound );
     
    [DllImport("winmm.dll")]
    		public static extern bool mciExecute (string lpstrcommand);
     
          }
    }

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    je ne connais pas cette dll, n'ayant utilisé jusqu'alors que PlaySound
    voici un exemple simple:
    A Simple C# Class to Play .WAV Files in .NET
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Membre actif
    Avatar de Blo0d4x3
    Inscrit en
    Octobre 2003
    Messages
    583
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 583
    Points : 265
    Points
    265
    Par défaut
    Avec ton code ca marche! Et ma dll aussi!. En faite je pense que le probleme devait venir du faite que la form ou je fesai mes test était dans la même solution. Trop bizarre.

  6. #6
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    alors
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/10/2005, 13h01
  2. Comment accéder à une DLL COM depuis un exécutable ?
    Par Denys dans le forum API, COM et SDKs
    Réponses: 10
    Dernier message: 20/09/2005, 08h04
  3. Comment exécuter une DLL ?
    Par chleuh dans le forum Langage
    Réponses: 4
    Dernier message: 29/06/2005, 14h27
  4. Comment créer une dll Win32 sous Delphi ?
    Par Mickey.jet dans le forum Langage
    Réponses: 8
    Dernier message: 16/06/2005, 15h38

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