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# Discussion :

Comment utiliser une dll?


Sujet :

C#

  1. #1
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Par défaut Comment utiliser une dll?
    Bonjour,

    Ma question va peut être paraître stupide, mais je me lance !
    Comment fait-on pour utiliser une dll .NET dans un projet C# lorsque la dll a préalablement été ajoutée aux références en suivant Projet --> Ajouter une Référence.
    Pour être plus clair, comment je peux appeler telle ou telle fonction de la dll dans une de mes méthodes du projet C# par exemple?

    Merci pour votre aide!

    P.S : un tout petit exemple de code serait le bien venu . Un grand merci d'avance.

  2. #2
    Expert confirmé
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    using LeNamespaceDeTaClasseDansLaDll;
     
    ...
    TaClasse m = new TaClasse();

  3. #3
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Par défaut
    Salut,

    Est-ce que la classe de la dll a forcément un namespace? Parce que à l'origine, c'est un .jar converti en .dll .NET grâce à IKVM. Dans ce .jar, il y a le nom du package :
    package MonPackage;

    public class MaClasse {...}

    Et c'est tout ce que je vois.

    Or quand dans mon projet C# je mets
    using MonPackage;
    ou
    using MaClasse;
    ou encore
    using LeNomDeLaDll;
    j'ai des erreurs de compilation du genre :
    Le type ou le nom d'espace de noms 'MonPackage' (ou 'MaClasse' ou 'LeNomDeLaDll') est introuvable (une directive using ou une référence d'assembly est-elle manquante*?)

    J'ai bien fait 'ajouter une référence' au projet en sélectionnant ma dll.

    Ces erreurs sont normals? Que dois-je faire?
    Si vous avez une idée, elle est bien venue !
    Merci d'avance

  4. #4
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    Bonjour,

    Essaye d'écrire le nom de la classe (MaClasse) dans ton code, et clique sur le bouton droit de ta souris et voir s'il y a l'option résolve.
    Normalement si t'a bien ajouter la réference d'un dll alors visual studio peut connaitre le chemin de ta classe, et il te donneras les choix
    des namespaces où il existe à l'aide de l'option résolve.

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 62
    Par défaut Explorateur d'objets
    Salut,

    Tu peux aussi te servir de l'explorateur d'objets. Si tu as correctement ajouté la dll elle devrait se trouver dans la liste et te permettre de connaitre le namespace.

  6. #6
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Par défaut
    J'inscris dans mon code la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse m = new MaClasse();
    Quand je fais un clique droit sur MaClasse, m, ou MaClasse() je n'ai pas l'option resolve. Par contre j'ai peut être l'équivalent : atteindre la définition.
    Quand je clique sur atteindre la définition, il me dit "impossible de naviguer vers MaClasse()".

    Est-ce que je suis censé pouvoir trouver ma dll dans les références quelque part si elle a bien été ajoutée?

  7. #7
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Par défaut
    Citation Envoyé par PxPar Voir le message
    Salut,

    Tu peux aussi te servir de l'explorateur d'objets. Si tu as correctement ajouté la dll elle devrait se trouver dans la liste et te permettre de connaitre le namespace.
    Ah ben tu réponds à l'interrogation que je me posais ci-dessus.
    Problème je ne vois pas la dll dans l'explorateur de solutions. Après il faut dire que le projet n'est pas le mien et qu'il est énorme. Donc peut être que la dll est cachée au milieu de tous les éléments de la liste?
    Je vais continuer ma recherche, mais je crois que la dll n'est pas ajoutée. Déjà, le nom de la dll ne figure pas dans la liste des références dans Projet --> ajouter une référence...

  8. #8
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Par défaut
    Bon rectification, le nom de la dll figure dans la liste de l'explorateur de solution. Elle a bien le nom de la dll. Donc le namespace correspond à ce que je lis, mais je crois que la dll a mal été construite puisque dans l'arbre des dépendances je peux lire :

    NomDll
    {} MonPackage
    MaClasse
    Bases et Interfaces
    Object

    Et c'est tout. Je ne retrouve pas les noms des méthodes.
    Mais le plus inquiétant, c'est que le using LeNamespaceDeLaDll; ne semble pas fonctionner

  9. #9
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Salut.

    Si vraiment tu coinces, tu peux faire le bourrin : tu désassembles ta DLL avec reflector et tu verras de suite le nom du namespace à utiliser.

    A+

  10. #10
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Par défaut
    Salut,

    Disons qu'à l'origine, c'est un .jar converti en .dll .NET grâce à IKVM. Donc, je n'ai pas besoin de désasembler je pense. Et puis le nom de la dll apparaît dans les références d'une partie du projet. Donc à priori, le namespace est connu. Et puis quand je compare l'appel à d'autres dll (dans le projet) avec mon appel. Ils sont fait de la même manière.

    Je vais tester Reflector néanmoins. On ne sait jamais.

  11. #11
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Par défaut
    Bon on dirait que la dll a finalement été reconnue.
    Reste à bien comprendre comment on utilise cette dll puisque les méthodes de la dll ne semble pas être reconnue quand je les utilise sans mot clé prédecesseur pour l'appel.

  12. #12
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    Salut,

    J'ai déjà utilisé ikvm et, logiquement, si au moment de la conversion de ton jar en dll il ne t'a marqué aucune erreur ta dll est correct, et donc elle s'utilise come n'importe quelle autre dll.

    qu'est ce que tu entends par : "les méthodes de la dll ne semble pas être reconnue quand je les utilise sans mot clé prédecesseur pour l'appel." ?

  13. #13
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Par défaut
    J'entends que je suis un mauvais programmeur et que je fais des erreurs de débutants. Et que les méthodes ne pouvaient pas être utilisées comme je le faisais... Je tourne la page et on oublie :-)

    Concernant IKVM, lors de la conversion je n'ai eu absolument aucune erreur. Est-ce qu'IKVM fait de la conversion de code depuis le java vers le C#?
    Et pour les import?
    IKVM implémente les librairies java les plus utilisées pour le .NET et les inclues dans la dll? Mais que se passe t-il dans le cas où c'est une librairie peu commune comme smatcardio par exemple? C'est ce que je fais dans ma classe Java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using javax.smartcardio.*;
    Une idée?

  14. #14
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    aaaah voilà là une grosse question ^^
    Il se trouve que je suis moi meme en train de bosser sur un convertiseur de java vers .net
    Il se trouve que c'est un processus assez complexe mais il existe certain projet permettant de faire ça de façon automatique (j'ai personnelement abandonné ikvm).
    Il existe : http://www.ezjcom.com/dotnet.html?gc...FcIWzAodCRKtpQ mais c'est utilitaire payant

    Personnellement j'utilise j2ctranslator : http://sourceforge.net/projects/j2cstranslator/

    Si ton programme java n'est pas trop compliqué ca devrait pouvoir le transformer sans trop de probleme..
    Pour avoir un peu d'aide tu peux aller sur le wiki : http://j2cstranslator.wiki.sourceforge.net/ ou le forum : http://sourceforge.net/forum/forum.php?forum_id=787970

    Ce projet a l'avantage d'etre maintenu à jour.
    Voilà et si tu as besoin d'aide quand à la conversion java vers c#, je suis dedant jusqu'au cou donc tu peux toujours me contacter par mp

    Edit : pour ce qui est des libraries peu commune, le plus simple est encore de programmé les classes utilisées directement en c#

  15. #15
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Par défaut
    Tiens une petite question alors

    Est-ce qu'IKVM m'aurait généré une erreur s'il y avait eu un souci quelconque avec l'API java smartcardio? Ou bien il dit rien et c'est le projet C# qui se charge de remarquer son absence au sein du projet?

    Edit : pour ce qui est des librairies peu communes, le plus simple est encore de programmer les classes utilisées directement en c#
    Tu veux dire quoi par là? Développer la librairie java en C# ou programmer la classe Java en C#?
    Dans le deuxième cas, le problème est que je ne sais pas s'il existe une librairie équivalente à la jsr268 Smart Card I/O API de Java en C# (i.e un équivalent pour faire de la communication PC/SC).
    La deuxième difficulté c'est que le C# c'est pas un langage que je connais. Il semble proche du java, mais j'ai jamais pratiqué.

    Si ikvm fonctionne, je vais rester là dessus. J'irais jeter un oeil à j2cstranslator quand même, sauf si tu me dis que c'est un logiciel énormissime qui marche tout le temps... Mais bon dans le cas contraire va falloir que je programme en C# ou en C++ (j'ai vu que la librairie que je cherche existe aussi en C++, mais je m'en suis rendu compte tardivement).

  16. #16
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    Je ne me souviens plus exactement mais il me semble qu'au moment de la transformation de ton jar, si ikvm ne trouve pas une classe, il sort une erreur. Ensuite les libraries utilisé par ikvm sont développé en C# donc il est possible qu'un equivalent à la librairie smartcardio existe, soit dans ikvm, soit dans le framework .net

    Je suis tombé sur ces deux articles qui peuvent peut-etre t'aider :
    http://www.aspfree.com/c/a/.NET/Smart-Cards-in-.NET/
    http://msdn.microsoft.com/fr-fr/magazine/cc163521.aspx

    Après je n'y connais rien en smart card donc je ne peux pas t'aider beaucoup plus.
    Le projet j2ctranslator pourrait uniquement te permettre de transformer ton code en c# mais pas les librairies externes (du moins il ne convertira pas correctement les classes qu'il ne connait pas), donc si ikvm fonctionne je te conseil effectivement de rester là-dessus.

    Bon courage en tout cas!

  17. #17
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Par défaut
    Merci pour les articles, j'irai voir demain.

    Quand j'utilise ma dll, les méthodes échouent systématiquement. J'essaye de détecter un lecteur de carte par exemple. Quand j'exécute le code Java via Eclipse, il trouve le lecteur sans problème, alors que là dans le projet C# il ne trouve rien. C'est normal ça? Je vois clairement dans la console ce qu'il se passe. La méthode est bien utilisée, mais il ne détecte pas le lecteur interfacé en USB. Bizarre...

    Bon allez, il est temps d'aller faire la fête

  18. #18
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    Malheureusement je n'y connais rien en lecteur de carte donc je ne peux pas trop t'aider sur ce point, mais si les méthodes sont executé mais rien ne se passe ca doit vouloir dire que ca a mal été transformé.
    Je ne sais pas exactement comment fonctionne ikvm mais peut etre transforme-t-il uniquement la signature pour les méthode qu'il ne sais pas traduire, ainsi ton programme fonctionne mais pas toute les méthodes. Regarde peut-etre dans les option de transformation d'ikvm, il y a peut-etre plusieurs modes de transformation...

  19. #19
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Par défaut
    Ok je vois ce que tu veux dire. Mais là où ça cloche c'est que grâce à des Console.WriteLine("..."); je vois que la méthode est utilisée et qu'il se passe certaines choses. Mais il ne semble pas détecter le lecteur... Après peut être que tout ce qui touche à la librairie smartCardIO de Java ne fonctionne pas mais ne génère pas d'erreur...

  20. #20
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    As-tu une idée de quelle classe ou librarie ta dll utilise pour se connecter au lecteur? Est-ce une classe contenu dans la dll ou bien une librarie exterieur à ton programme (ta dll)?
    Malheureusement sans voir de code il va être assez difficile de t'aider...surtout si ton prog ne sort aucune exeption...

Discussions similaires

  1. [C] Comment utiliser une DLL ?
    Par The Lord of Nesquik dans le forum Windows
    Réponses: 1
    Dernier message: 14/05/2006, 12h26
  2. [COM] Comment utiliser une dll DotNet dans un projet win32 ?
    Par Marmottoc dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 05/05/2006, 15h58
  3. [Langage]Comment utiliser une dll .NET dans VB6?
    Par BouB dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 13/04/2006, 14h20
  4. comment utiliser une DLL win32 en C??
    Par Jayceblaster dans le forum C
    Réponses: 8
    Dernier message: 31/03/2006, 12h49

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