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 :

System.AccessViolationException a l'appel d'une dll native


Sujet :

C++/CLI

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 156
    Points : 95
    Points
    95
    Par défaut System.AccessViolationException a l'appel d'une dll native
    Salut, j'ai un binding de la dll native openal : Tao.Openal.

    Je veux appeler la fonction Alc.alcGetString (IntPtr device, Int32 attribut) qui permet de récuperer une lsite de device disponible, en passant un pointeur null au premier argument.

    Comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string listDevice =Alc.alcGetString( IntPtr.Zero, Alc.ALC_DEVICE_SPECIFIER);
    En appelant la fonction de cette façon j'ai le droit à une ViolationException :
    An attempt to read or write memory protected. This indicates that another often memory is damaged. At Tao.OpenAl.Alc.alcGetString (IntPtr device, Int32 attribut
    Voila si vous voulez des informations complémentaires: demandez, je vois pas trop d'ou peut venir le bug.

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    tu as vérifié la manière dont la fonction que tu appèles est déclarée, surtout avec les conventions d'appelle ? ( StdCall, CDecl, ... )

  3. #3
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    et tu es sur que lui passer un pointeur null c'est cohérent ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 156
    Points : 95
    Points
    95
    Par défaut
    Alors bonjour a tous et bonne année 2008.

    J'ai suivi le conseil de smyley et j'ai jeté un oeil au source, ce qui a été trés bénéfique puisque j'a idécouvert l'existence d'une fonction qui me prémache le travail.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Alc.alcGetStringv(IntPtr.Zero, Alc.ALC_DEVICE_SPECIFIER);
    Cette fonction renvoie sous forme de tableau la liste des dévices avaibles, au lieu d'un seul string. Et cette fonction fonctionne parfaitement.

    Ce qui est bizzare c'est que la fonction Alc.alcGetStringv() qui ne fait pas partie de la dll native appelle une fonction trés proche de alcGetString qui est alcGetStringInternal à la seul différence que alcGetStringInternal retourne un IntPtr au lieu d'un string (une string?).Ensuite en interne elle parle le pointeur et renvoie un tableau de strinf contenant une liste de device.

    Je vous passe le code http://pastebin.com/m2db92556

    Bref, je sais pas trop comment expliquer ça.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 156
    Points : 95
    Points
    95
    Par défaut
    C'était tout simplement un bug qui vient d'etre fixé:
    http://taoframework.svn.sourceforge....ramework/trunk/src/Tao.OpenAl/Alc.cs?r1=4&r2=66

    @+

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

Discussions similaires

  1. [Débutant] Appel d'une dll native dans un projet VB.Net
    Par 3aychoucha dans le forum VB.NET
    Réponses: 0
    Dernier message: 25/04/2012, 15h24
  2. Réponses: 4
    Dernier message: 11/10/2011, 14h34
  3. PB appel d'une DLL
    Par maveric dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 10/08/2006, 19h17
  4. Appel d'une Dll dans le dossier courant.
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/07/2006, 21h00
  5. Appel d'une dll (c++) dans un programme c++
    Par cout dans le forum C++
    Réponses: 2
    Dernier message: 01/06/2006, 14h52

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