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. #21
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Par défaut
    Alors, ma dll est constituée d'une classe qui permet d'effectuer toutes sortes d'opérations sur ma carte.
    J'utilise une librairie pour gérer le dialogue avec le lecteur de carte qui est la jsr 268 de sun :
    JSR268 résumé
    Téléchargement de la doc
    Je pense que c'est une librairie qui se sert des drivers PC/SC du composant pour communiquer avec le lecteur.

    En d'autres termes, moi je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import java.util.List;
    import java.util.ListIterator;
    import javax.smartcardio.*;
    Grâce à la doc j'ai fait une classe et des méthodes capables de communiquer, dialoguer etc avec le lecteur de carte.

    Exécution Java
    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
    tf = TerminalFactory for type PC/SC from provider SunPCSC
    cts = sun.security.smartcardio.PCSCTerminals@7d8483
    ********
    Reader detection
    ********
    l = [PC/SC terminal SCM Microsystems Inc. SCL3711 reader & NFC device 0]
    List of PC/SC Readers connected:
    Reader: SCM Microsystems Inc. SCL3711 reader & NFC device 0
     
    *******************
    Selection du terminal
    READER_NAME = SCM Microsystems Inc. SCL3711 reader & NFC device 0
    ct = PC/SC terminal SCM Microsystems Inc. SCL3711 reader & NFC device 0
    CardTerminal = PC/SC terminal SCM Microsystems Inc. SCL3711 reader & NFC device 0
    Terminal fetched

    Exécution C#
    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
    tf = TerminalFactory for type None from provider None
    cts = javax.smartcardio.TerminalFactory$NoneCardTerminals@f6
    TraitementNFC()
    ********
    Reader detection
    ********
    l = []
    List of PC/SC Readers connected:
     
    *******************
    Selection du terminal
    READER_NAME = SCM Microsystems Inc. SCL3711 reader & NFC device 0
    Contactless reader name incorrect ==> cts.getTerminal(READER_NAME) failed
    Exception : ct =null
    No terminal were fetched

    P.S : on me conseille de tester une compilation statique. Tu sais comment on fait ça dans visual studio .NET 2003?

  2. #22
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    Je pense que ca dépasse un peu mes compétence ...
    Etant donné que ta dll est crée sans soucis je suppose qu'elle est valide et que tu as bien les classes smartradio. Cependant si ca ne fonctionne pas il est fort possible que ces classes soient des coquilles vide, en attentent de développement ce qui expliquerai que ton programme c# s'execute mais ne réussisse pas à ce connecter. Encore une fois je ne fait qu'emettre des hypotèse.
    Mis a par ta ddl utilises-tu d'autre librarie fourni par ikvm? la librarie "javax.smartcardio" de c# a-t-elle aussi été transformé à l'aide d'ikvm? Je pense qu'il faudrait que tu ailles te renseigner sur le forum d'ikvm (http://www.nabble.com/IKVM-.NET---Dev-f2617.html) tu auras plus de chance d'avoir des réponses.
    Pour ce qui es de la compilation statique je ne sais pas vraiment comment faire dsl

  3. #23
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Par défaut
    Oui c'est ce que je me demandais. Si ça se trouve, ce sont des coquilles vides en attente de programmation. Ce qui expliquerait son pseudo fonctionnement.

    Quant à la librairie smartcardio de Java (pas de C#) incluse dans ma dll, je ne sais pas si elle a été convertie à l'aide d'IKVM. C'est justement ça la question. Est-ce qu'IKVM a généré des coquilles vides (comme tu dis) de cette librairie ou est-ce que cette librairie a déjà était implémentée pour .NET. Je ne sais pas. Mais ça serait étonnant de convertir un .jar en .dll sans avertir l'utilisateur que la librairie smartcardio risque de poser un problème puisqu'elle n'a pas été implémentée.
    Sinon j'ai aussi dû inclure au projet C# la librairie IKVM.OpenJDK.ClassLibrary.dll.

    Je viens d'avoir une idée : grâce à reflector, j'ai "désassemblé" IKVM.OpenJDK.ClassLibrary.dll et j'ai pu voir que visiblement, l'api smartcardio était bien implémentée par IKVM :


    Donc visiblement, le problème vient d'ailleurs...


    P.S : merci pour le lien, j'y suis déjà en fait ;-)

  4. #24
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    Est-ce que tu peux utiliser la librairie désassemblé? Je veux dire peux-tu enregistrer le code généré par reflector?
    Si c'est le cas tu prends ce code et tu crées un projet visual avec (nommons le IKVM.OpenJDK), ensuite dans ton projet à toi, au lieu d'utiliser la dll en réference tu utilises le projet IKVM.OpenJDK nouvellement créé. Ensuite tu peux mettre des points d'arret un peu partout dans les classes que tu utilise pour voir par ou "passe" ton execution et comprendre ainsi pourquoi ca ne marche pas!

  5. #25
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Par défaut
    L'idée n'est pas mauvaise, mais malheureusement, je ne crois pas que je puisse enregistrer le code. Sauf en faisant du copier coller de toutes les méthodes les unes après les autres, mais bon... En plus je remarque que des méthodes importantes comme celle qui permet de récupérer le terminal provoque une erreur quand je clique dessus pour voir le code désassemblé. Comme si cette méthode parmi tant d'autres avait mal été convertie? Elle n'est pas la seule. Et j'ai remarqué que le problème était le même pour certaine méthode de ma dll. (probablement lié aux erreur de la conversion de l'api).

    Quel horreur l'interfaçage Java --> C#...

  6. #26
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    Citation Envoyé par Vagabone Voir le message
    Quel horreur l'interfaçage Java --> C#...
    Je suis on ne peut plus d'accord
    As-tu essayé de faire un petit exemple de test en utilisant directement les classes de javax.smartradio en c#? Simplement essayé un connexion toute bete sans passer par ton programme converti avec ikvm.
    Ca me parait quand meme etrange que cette librairie ne fonctionne pas, je pense quand meme qu'ils ne l'aurait pas mis si elle ne fonctionnait pas.
    Si ca ca fonctionne tu peux être sur que le probleme vient de ton prog java converti en c#, si ca ne fonctionne pas tu sauras que ca vient de la librairie...

  7. #27
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Par défaut
    Tiens regarde, je crois que j'ai eu une réponse concernant l'API smartCardIO.

    Hi,

    The API has been implemented, but the API is just a wrapper that allows you load an actual implementation of that API. The implementation (what I called "backend") is the missing part.

    Regards,
    Jeroen
    Du coup je crois qu'il ne sert plus à rien d'essayer de faire ce que tu disais. Parce que javax.smarcardio est implémenté mais comme il dit, c'est juste l'emballage qui est disponible. Le code interne doit être ajouté soit même...

    Youhou

  8. #28
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    Balo... Il ne te restes donc plus qu'a trouvé une implementation disponible en c# ou alors la recoder toi meme (ce qui es faisable je pense, si tu as un peu de temps) les sources sont là si tu ne les a pas : http://www.java2s.com/Open-Source/Ja...martcardio.htm

    Sinon tu peux toujours revenir sur la solution que j'évoquais précedement, c'est à dire convertir le code de smartcardio avec j2ctranslator, ou même essayer de le faire avec ikvm...

  9. #29
    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 sources, en effet je ne les avais pas. Si j'ai bien compris, ton idée consiste à récupérer ce code java, le mettre dans un projet (SmartCardIOCsharpClass). Le convertir avec Java Language Conversion assistant disponible dans visual studio .net 2003 ou alors convertir le code avec j2cstranslator.
    Ensuite je fais de même avec mon code Java, je le convertis. Je remplace la directive using javax.smartcardio par un using SmartCardIOCsharpClass et le tour est joué?

  10. #30
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    En gros oui, mais ca serait comme même un peu facile de dire le tour est joué :p
    Disons que sur le principe c'est pas bien compliqué mais la convertion ne se fait jamais bien du premier coup, il faudra que tu corriges un certain nombre d'erreurs à la main après convertion.
    Je ne sais plus trop ce que vaux Java Language Conversion Assistant, je l'avais essayé mais abandonné très vite donc je suppose que ca ne fonctionne pas très bien.
    Et avec j2ctranslator on va dire que ca marche mais il ya a beaucoup des erreurs à corriger après conversion. Je l'utilise depuis 4 mois (je suis en stage et mon sujet consiste à implémenté un convertisseur java vers C#) et je me suis quand meme pris la tete un certain nombre de fois (bon il faut dire l'application que je dois convertir contient plusieurs centaines de classe donc c'est un peu différent).

    Pour résumé, ce que je recommande par ordre de préférence:
    1. Utilisation de j2ctranslator
    2. Réécriture directement en c#, à la main
    3. Java Language Conversion Assistant (sans aucune garantie...)

  11. #31
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 56
    Par défaut
    Ok ok. En tout cas merci pour les efforts que tu fournis pour m'aider, c'est vraiment sympa. J'essaierais lundi j2ctranslator pour voir. En plus ça devrait être simplifié par ton expérience . Je suis moi aussi en stage depuis 4-5 mois, mais je dois implémenter une application de libre service bancaire en sans contact sur les automates bancaires. Deux stages bien différents

    See you on Monday !

  12. #32
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    Pas de problème

    Et si tu as besoin d'aide avec j2ctranslator n'hésite pas (passe par mp ca sera plus simple et ça ne dérangera personne).

    Bon week-end

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