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 :

DLLImport ou declare, comment sa marche?


Sujet :

VB.NET

  1. #1
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 201
    Points : 173
    Points
    173
    Par défaut DLLImport ou declare, comment sa marche?
    Salam,
    J'ai une dll que je veux travailer avec dans mon projet. je veux l'implementé en utilisant DllImport ou linstruction declare.
    Sachant que la dll que je veux implementer c'est moi meme qu'il a crée.
    Du code serais le bien venue.

  2. #2
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Pour utiliser une dll que tu as créée, tu importes ta dll dans ton projet puis tu l'utilise comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Ma_Classe as new Ma_Classe_Dans_Ma_Dll
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Si ta DLL est en .NET, c'est simple. Il suffit de l'ajouter dans les références de ton projet (dans l'explorateur de solution), et les types de ta DLL seront accessibles dans ton programme (il faudra peut-être importer le namespace dans lequel ils sont déclarés).
    Si c'est une DLL native, je te suggère de suivre un tutoriel, celui de Thomas Lebrun sur Developpez.com a l'air bien.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    je suis dans le même cas que Charaf. C'est à dire que j'ai une dll native que j'aimerais utiliser dans un projet C#.
    A l'exécution du projet, j'ai l'exception suivante :
    Une exception non gérée du type 'System.DllNotFoundException' s'est produite...
    Informations supplémentaires*: Impossible de charger la DLL (ma_dll.dll).
    Je dois mal placer la dll dans les dossiers du projet. Est-ce que quelqu'un aurait une idée de l'endroit où je dois placer la dll?

    Merci d'avance.

  5. #5
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    Citation Envoyé par Vagabone Voir le message
    Bonjour,

    Je dois mal placer la dll dans les dossiers du projet. Est-ce que quelqu'un aurait une idée de l'endroit où je dois placer la dll?

    Merci d'avance.
    En fait tu doit juste référencer la DLL via le menu Projet/Ajouter une référence Tu va sur le volet parcourir et tu sélectionne ta référence.

    Il est a noté que par défaut cette DLL sera copier automatiquement dans le dossier /bin et /debug.
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  6. #6
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Points : 26
    Points
    26
    Par défaut
    Merci pour la réponse, mais comme je l'ai précisé, il s'agit d'une dll native et non d'une dll .NET. Si je fais comme tu me dis, j'ai une erreur de type :
    il ne s'agit pas d'un assembly valide ou d'un composant com
    . Autrement dit, pour utiliser la dll, il faut suivre le tuto http://morpheus.developpez.com/dlldotnet/.
    Mon problème, c'est que je ne sais pas où placer cette dll dans le dossier de mon projet pour ne plus avoir l'exception
    'System.DllNotFoundException'
    qui montre clairement que la dll n'a pas été trouvée.

  7. #7
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Il faut la mettre dans le même répertoire que l'exécutable. Tu peux aussi jouer avec le probing pour indiquer dans quel(s) sous-répertoire(s) chercher les assemblies.
    Pas de questions techniques par MP

  8. #8
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Points : 26
    Points
    26
    Par défaut
    Oki, c'est chose faites ! Enfin j'ai regardé le nom de l'exe et j'ai fait une recherche automatique dans le projet (qui set assez gros et qui n'est pas de moi). L'exécutable a été trouvé dans

    .../Dossier/bin/Debug
    .../Dossier/bin/Release
    .../Dossier/obj/Debug
    .../Dossier/obj/Realease.
    J'ai mis la dll dans chacun de ces dossiers pour le test. (j'attends votre savoir pour me dire dans lequel de ces dossiers je dois vraiment mettre la dll).

    Sinon, maintenant j'ai l'exception suivante un peu différente. Je me pencherais dessus après manger :

    'System.EntryPointNotFound'
    Impossible de trouver le point d'entrer <nomFonctionUtilisée> dans la DLL ma_dll.dll.

  9. #9
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    L'idéal serait de mettre la DLL dans un répertoire de la solution et d'ajouter une commande de compilation pour la copier automatiquement dans bin\debug ou bin\release en fonction du mode choisi pour la compilation. Mais dans un premier temps limite toi à la copier dans bin\debug et bin\release.

    Pour l'erreur, c'est que dans la DLL native la fonction n'est pas visible ou bien que tu as indiqué le mauvais nom lors du DllImport.
    Pas de questions techniques par MP

  10. #10
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Points : 26
    Points
    26
    Par défaut
    Qu'entends tu par 'pas visible'? Je ne crois pas m'être trompé de nom de fonction. Après, peut être que l'appel est mal fait. C'est possible ça. Je me suis contenté de faire un DllImport pour l'appeler :

    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
     
    namespace <namespace>
    {
       using ....
     
       class <class>
       {
     
          [ DllImport("ma_dll.dll") ]	
          // Déclaration de la méthode à utiliser
          public static extern void readerDetection();
          ...
          public method()
          {
           ...
           readerDetection();
           ...
          }
          ...
       }
     
       ...
    }
    Après, il est vrai que c'est la première fois que je fais du code pour en faire une dll. Et que c'est la première fois que j'utilise une dll.

    Bon je retourne à mon code et je vous tiens au courant si avancée il y a !

  11. #11
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Citation Envoyé par Vagabone Voir le message
    Qu'entends tu par 'pas visible'?
    Dans une DLL native une fonction doit être marquée comme exportée (ou quelque chose comme ça) pour pouvoir l'utiliser depuis l'extérieur. Enfin il me semble.
    Pas de questions techniques par MP

  12. #12
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Points : 26
    Points
    26
    Par défaut
    Je crois que c'est le terme 'extern' de la déclaration de la méthode qui permet de l'utiliser de l'extérieur. Enfin je pense.

  13. #13
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Points : 26
    Points
    26
    Par défaut
    Non rien à faire, ja'i toujours le message d'erreur :
    Impossible de trouver le point d'entrer <nomFonctionUtilisée> dans la DLL ma_dll.dll.
    Je ne sais pas vraiment quoi faire.
    J'ai même fait des appels du genre :
    [ DllImport("ma_dll.dll", EntryPoint="laMethodeDeLaDll") ]
    static extern void unNomDeMethodeNonUtiliseDansLeProjetPourEtreCertainQuilN'yEstPasDePbDentree();
    Et puis j'utilise ça dans une méthode comme dans l'exemple précédent.

    Mais même ça ne suffit pas à résoudre le problème.

    Est-ce que le problème peut venir du fait que j'ai fait d'un <fichier>.jar (java) un <fichier>.dll avec l'application ikvmc.exe. Je ne sais pas dans quelle mesure ce logiciel est efficace.
    Peut être qu'il existe d'autres solutions qui me permettraient d'utiliser ma classe java au sein d'un mon projet C# (ou .NET).

    Je voulais aussi essayer d'utiliser le logiciel jnbridge http://www.jnbridge.com/, mais j'ai du mal à comprendre comment ça s'utilise...

    Merci pour votre aide !

  14. #14
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Points : 26
    Points
    26
    Par défaut
    En suivant les conseils d'un autre post (#10) du forum :
    http://www.developpez.net/forums/d94...ee/#post625864

    J'ai voulu voir les méthodes dans la dll et voilà ce que j'obtiens :

    Dump of file C:\ma_dll.dll

    File Type: DLL

    Summary

    2000 .reloc
    2000 .rsrc
    12000 .text
    Est-ce que ça signifie qu'il n'y a rien dans la dll?

    Merci d'avance.

  15. #15
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Vide je ne pense pas mais aucune fonction n'est exportée. Tu ne peux donc pas y accéder depuis l'extérieur. Il faut vérifier ta DLL et voir si la fonction est bien exportée. Le forum C/C++ devrait pouvoir t'aider de ce côté.
    Pas de questions techniques par MP

  16. #16
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Points : 26
    Points
    26
    Par défaut
    En effet, aucune fonction ne semble être exportée... Le problème vient peut etre de l'utilisation de ikvmc... J'ai voulu tester jbimp parce que j'en ai entendu parler en fouinant sur le net, mais je n'ai pas été capable de le télécharger. Impossible de le trouver où que ce soit.
    Je vais retenter avec ikvm pour voir si j'arrive à faire quelque chose de mieux...

    J'ai vaguement chercher sur le forum C/C++ des informations là dessus, mais je ne sais pas vraiment quoi chercher, et je ne suis pas sûr que cela réponde à mon problème.

  17. #17
    Nouveau membre du Club
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Points : 26
    Points
    26
    Par défaut
    Re-bonjour

    Est-ce que quelqu'un a déjà eu ce genre de difficultés avec ikvmc?
    Est-ce que quelqu'un connaitrait l'équivalent de la librairie jsr 268 en java (Java Smart Card I/O API)

    Merci

Discussions similaires

  1. ToAsciiEx, comment cela marche ?
    Par mikyfpc dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/02/2004, 21h39
  2. [MFC] list box : comment ça marche
    Par runn2 dans le forum MFC
    Réponses: 4
    Dernier message: 28/01/2004, 12h36
  3. [SYNEDIT] -> Comment ça marche ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/01/2004, 19h11
  4. [TP][Turbo Vision] comment ça marche ??
    Par Costello dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 05/08/2003, 00h24
  5. [update][req. imbriquee] Comment ca marche ??
    Par terziann dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/07/2003, 12h51

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