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

API standards et tierces Java Discussion :

Acces a une dll ecrite en C


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Acces a une dll ecrite en C
    Bonjour

    Je n'ai aucune experience en Java mais j'aimerais un avis sur la possibilité d'interfacer une DLL ecrite en C avec Java

    Pour information j'ai déja ecrit une interface en CSharp pour cette meme DLL

    Cette DLL contient plusieurs fonctions des des parametre d'appel different mais les type principaux sont

    string (char *)
    int *
    int

    En Csharp je n'ai pas eu de difficulté majeure pour les le passage et retour de parametre mais j'ai du effectivement chipoter un peu

    Je me demande si pour Java ce sera similaire ou si je m'attaque a la muraille de chine !

    Merci de votre aide

  2. #2
    Membre chevronné Avatar de KindPlayer
    Profil pro
    Inscrit en
    Février 2007
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 471
    Par défaut
    C'est tout à fait possible. Cela se fait via une JNI, java native interface qui établit entre autres les correspondances entre les types C/C++ et Java. Donc regarder des tuto sur la JNI.

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci,

    Je vais regarder de ce coté

    Mais ton sentiment de base ?

    Est-ce que cela risque d'etre beaucoup plus compliqué qu'avec Csharp ou bien c'est similaire ?

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Avec JNI tu devras passer par du code natif...
    Sinon tu peux te tourner vers JNA, en particulier si ta DLL n'utilise pas de type exotique...

    Tutoriel : Exécuter du code natif en Java : JNI VS JNA

    a++

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut

    Qu'entends tu par "code natif" ?

    E cSharp je n'ai pas eu besoin de transformer ma DLL

    J'ai du adapter les déclarations des fonctions
    Et j'ai ecrit une interface en Csharp qui permet d'appeller la dll via des methodes csharp
    J'espere pouvoir faire la meme chose en java

    Exemple des déclarations

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
     
    using System.Runtime.InteropServices;
     
    static public class Routing
      {
        [DllImport("bcta.Dll")]
        static public extern int bctaOpen(ref IntPtr hBcta, string a, char b);
        [DllImport("bcta.Dll")]
        static public extern int bctaGetTrack(IntPtr hBcta, PntF[] Pnt, int count);
        [DllImport("bcta.Dll")]
        static public extern int bctaSetName(IntPtr hBcta, string name);
        [DllImport("bcta.Dll")]
        static public extern void bctaClose(IntPtr hBcta);
        [DllImport("bcta.Dll")]
        static public extern int bctaSetAttribute(IntPtr hBcta, UInt32 nAttr, UInt32 nValue);
        [DllImport("bcta.Dll")]
        static public extern int bctaGetAttribute(IntPtr hBcta, UInt32 nAttID, ref UInt32 pAttr);
        [DllImport("bcta.Dll")]
        static public unsafe extern int bctaGetName(IntPtr hBcta, UInt32 nAttID, out IntPtr** StrPtr);
        [DllImport("bcta.Dll")]
        static public unsafe extern int bctaGetElemNodes(IntPtr hBcta, UInt32 nAttID, out PntF* PntPtr);
        [DllImport("bcta.Dll")]
        static public unsafe extern int bctaGetElemNodesAB(IntPtr hBcta, UInt32 ElemId, UInt32 *NodePtr);
        [DllImport("bcta.Dll")]
        static public unsafe extern int bctaGetElemByNodeA(IntPtr hBcta,UInt32 dsId, UInt32 NodeA, UInt32* SegPtr);
     
        [DllImport("bcta.Dll")]   // recherche d'elements proches d'un point
        static public unsafe extern int bctaGetElemsAt(IntPtr hBcta, ref PntF Pnt, UInt32 dist, UInt32 Mask, out UInt32 *SegPtr);
     
        [DllImport("bcta.Dll")]   // Get attribut d'un ID segment
        static public unsafe extern int bctaGetElemAtt(IntPtr hBcta, UInt32 Id, char b, ref UInt32 SegAttr);

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par olibara Voir le message
    Qu'entends tu par "code natif" ?
    JNI nécessite que la DLL soit adapté à Java, et donc cela oblige à écrire une DLL wrapper, et donc à faire du code natif...




    JNA permet quand à lui un mapping automatique des méthodes, en respectant un certain format (voir le tutoriel donnée plus haut)


    a++

Discussions similaires

  1. Utiliser une DLL ecrite en VB.NET sous Delphi
    Par vg-matrix dans le forum Langage
    Réponses: 6
    Dernier message: 13/11/2012, 11h50
  2. Chemin d'accès dans une dll
    Par The_link dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 15/05/2008, 19h14
  3. Réponses: 2
    Dernier message: 07/05/2008, 15h01
  4. Modifier une dll ecrite en VB6 !
    Par Seb.26 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 30/05/2007, 17h13
  5. [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Par flash dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/09/2002, 10h15

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