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

VB.NET Discussion :

Import de DLL - appel 2 fois ne fonctionne pas


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 40
    Points : 25
    Points
    25
    Par défaut Import de DLL - appel 2 fois ne fonctionne pas
    Bonjour,

    J'utilise une DLL que j'ai écrite en C dans mon programme en VB. Pas de problème lorsque j'appelle une 1ère fois une fonction de cette DLL, mais la 2ème fois que j'y fais appel dans mon code, j'ai l'erreur suivante :

    L'exception SEHException n'a pas été gérée.
    Mon import de DLL est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        <DllImport("dieharder.dll", CallingConvention:=CallingConvention.Cdecl, EntryPoint:="dieh0@8")> _
        Private Shared Sub dieh0(ByVal fichierATester As String, ByRef res As Double)
     
        End Sub
    A noter que l'erreur survient dans 2 cas : quand j'appelle la même fonction 2 fois à partir de la DLL et quand j'appelle 2 fonctions différentes de cette même DLL.

    Des idées d'où vient le problème?

    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Regarde dans ta DLL si tu n'a pas une fuite mémoire (Courant en C) ou si un pointer n'est NULL lors du deuxième appel

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    Non...
    En regardant quelques forums je crois que la solution serait de décharger puis recharger ma DLL, mais je ne sais pas comment la décharger. Des idées?

    Merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    oui, c'est sur ça devrait fonctionner, mais je pense qu'il y a un soucis tous de même ailleurs.

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 141
    Points : 201
    Points
    201
    Par défaut
    Tu dois la charger dans un AppDomain indépendant, et décharger cet AppDomain complètement (MSDN pour décharger une dll).

    Cependant, dans ton cas, je commencerais par simplement la supprimer de la solution et de la référencer à nouveau.

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    Merci pour ta réponse, mais je fais ça comment?
    J'ai essayé un File.Delete mais sans effet.

  7. #7
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    SEHException traduit simplement une exception non-gérée, autrement dit une exception C++. Ça peut venir de n'importe quoi et je ne vois pas pourquoi décharger la biblio résoudrait le problème. Plus vraisemblable : es-tu certain de la signature de ta fonction ? Quelle est la signature de la fonction importée ?

    Cela dit, si tu veux décharger une biblio, il suffit de faire un p/invoke de FreeLibrary (de mémoire, à vérifier sur msdn).

  8. #8
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 141
    Points : 201
    Points
    201
    Par défaut
    Citation Envoyé par douze_12 Voir le message
    Merci pour ta réponse, mais je fais ça comment?
    J'ai essayé un File.Delete mais sans effet.
    Suis mon lien MSDN, tout y est renseigné.
    Cependant, comme le dit DonQuiche, je ne vois pas comment cela pourrait résoudre le problème (mais c'est toujours bon de se renseigner!).

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    Mais si la signature de la fonction était mauvaise, elle ne fonctionnerait pas quand je l'appelle une seule fois si?

  10. #10
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    J'ai du mal à saisir ce qui est dit sur MSDN...
    Du coup pour contourner le problème, je souhaite savoir s'il sera beaucoup plus couteux de créer 2 DLL différentes?

    Merci.

  11. #11
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 141
    Points : 201
    Points
    201
    Par défaut
    Coûteux je ne pense pas, mais quel serait l'intérêt ?

  12. #12
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Citation Envoyé par douze_12 Voir le message
    Mais si la signature de la fonction était mauvaise, elle ne fonctionnerait pas quand je l'appelle une seule fois si?
    Ca dépend de ce que fait la fonction. Difficile à dire a priori.

    Citation Envoyé par douze_12 Voir le message
    J'ai du mal à saisir ce qui est dit sur MSDN...
    Du coup pour contourner le problème, je souhaite savoir s'il sera beaucoup plus couteux de créer 2 DLL différentes?
    Si tu ne comptes appeler ta fonction que deux fois en tout et pour tout, pourquoi pas.
    M'enfin bon tu te balladeras peut-être avec une corruption de mémoire, ce serait fâcheux.
    FreeLibrary n'est quand même pas si compliqué !

    Cela dit, je pense vraiment qu'il ne faut pas chercher du côté des bidouilles aléatoires mais plutôt :
    * Vérifier les signatures des imports.
    * Vérifier que la biblio est correctement utilisée.
    * Est-on certain que la biblio est fiable ?

    Personnellement j'ai beaucoup utilisé le p/invoke et je n'ai jamais eu à faire de telles bidouilles. Quand ça plante c'est que j'ai fait une boulette.

  13. #13
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    "Vérifier les signatures des imports" ça signifie regarder mon export definition file? Désolée je comprends pas bien.

  14. #14
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Il s'agit simplement de vérifier que la signature de dieh0 et compagnie correspondent bien aux signatures des fonctions C correspondantes. Si tu as des doutes, n'hésite pas à nous donner ces signatures.

  15. #15
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    S'il s'agit bien des prototypes c'est bon pas de doute dessus. Merci.

Discussions similaires

  1. [XL-2003] Macro d'import de données selon ref qui ne fonctionne pas
    Par sharox dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 16/01/2015, 09h34
  2. Réponses: 2
    Dernier message: 27/09/2013, 09h40
  3. Réponses: 19
    Dernier message: 23/04/2012, 02h49
  4. Les appels aux fonctions ne fonctionnent pas
    Par MaPommeTao dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 16/08/2011, 22h33
  5. Comment faire fonctionner #import "msxml.dll" ?
    Par julien.sagnard dans le forum C++Builder
    Réponses: 1
    Dernier message: 25/10/2007, 16h13

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