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 exporter un objet C++ vers un programme JAVA?


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 72
    Points : 57
    Points
    57
    Par défaut Comment exporter un objet C++ vers un programme JAVA?
    Bonjour,

    J'uutilise JNI pour exporter des entiers, strings, longs ... d'une dll ecriteb en c++ vers un programme java.

    Mais en réalité j'ai besoin d'exporter un objet c++ en occurence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Myclass 
    {
             unsigned short un;
             unsigned short deux;
             unsigned short trois;
    };
    C'set ce qu il y a de plus simple comme classe.

    Dans mon programme C++ je veux l'exporter vers un programem JAVA.

    Merci pour votre aide,

    -- Hamdi

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je crois qu'il te faudra faire un wrapper en C++ pour chaque classe: Tout un lot de fonctions à chaque fois :
    http://en.wikipedia.org/wiki/Java_Native_Interface


    Si c'est trop compliqué, tu peux réfléchir à l'option de faire un wrapper COM et utiliser un utilitaire pour accéder à COM depuis Java...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 72
    Points : 57
    Points
    57
    Par défaut
    Merci pour ta reponse, en fait je trouve très génant de faite à chaque fois la traduction des types C++ en leurs equivalents en Java. En plus et comme tu le disais ça fait un tat de fonctions.

    J'ai enfin trouvé une solution plus simple et très efficasse : C'est en utilisant l'API Javolution avec JNI.
    Et voilà mon test qui marche très bien :

    //---------------- nativetest.java ---------------------

    import java.nio.ByteBuffer;
    import java.nio.ByteOrder;

    import javolution.io.*;

    class Myclass extends Struct
    {
    // Hardware clock mapped to memory.
    Unsigned16 un = new Unsigned16(); // unsigned short seconds:5
    Unsigned16 deux = new Unsigned16(); // unsigned short minutes:5
    Unsigned16 trois = new Unsigned16(); // unsigned short hours:4

    static void showBufferData(ByteBuffer buf, String name)
    {
    System.out.println("Buffer data for " + name);
    int cnt = 0;
    while(buf.hasRemaining())
    {
    System.out.print(buf.get() + " ");
    cnt++;
    if(cnt%12 == 0)
    System.out.println();
    }
    System.out.println();
    }

    Myclass()
    {
    ByteBuffer buff = Myclass.nativeBuffer();
    buff.order(ByteOrder.nativeOrder());
    setByteBuffer(buff, 0);
    }
    private static native ByteBuffer nativeBuffer();

    public ByteOrder byteOrder()
    {
    return ByteOrder.nativeOrder();
    }

    }

    public class nativetest extends Struct
    {
    static
    {
    try
    {
    System.loadLibrary("FBToolkitEnergy");

    }
    catch (Exception e)
    {
    System.out.println(e.getMessage());
    }
    }

    public static void main(String[] argv)
    {
    Myclass mc = new Myclass();

    System.out.println("mc.un : " + mc.un.get());
    System.out.println("mc.deux : " + mc.deux.get());
    System.out.println("mc.trois : " + mc.trois.get());
    }
    }
    //-----------------------------------------------------

    et ça c'est :
    //-------------------Testcpp.cpp [extrait de mon dll]---------
    struct Myclass
    {
    unsigned short un;
    unsigned short deux;
    unsigned short trois;
    };

    JNIEXPORT jobject JNICALL Java_Myclass_nativeBuffer (JNIEnv * env , jclass)
    {
    static Myclass mc;
    mc.un = 101;
    mc.deux = 202;
    mc.trois = 303;

    jobject jo = env->NewDirectByteBuffer(&mc, sizeof(mc));

    return jo;
    }
    //-----------------------------------------------------------

    J'execute ma classe java, qui recupère un object C++ de ma DLL et qu elle affiche les valeurs de ces attribut.

    Voilà j'ai voulu mettre ça sur le forum, car ça peut être utile pour d'autres personnes qui en aurons besoin.

    Merci,

    -- Hamdi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment exporter un fichier Excel vers CSV
    Par machipot dans le forum VBA Access
    Réponses: 0
    Dernier message: 09/06/2008, 22h09
  2. Comment exporter contacts Outlook 2003 vers Mac ?
    Par Mister Paul dans le forum Outlook
    Réponses: 2
    Dernier message: 29/02/2008, 14h47
  3. Comment exporter les objets d'un utilisateur vers un autre ?
    Par p026687 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/05/2007, 18h00
  4. Réponses: 5
    Dernier message: 16/03/2006, 00h37
  5. Comment exporter un lien hypertexte vers excel
    Par Celia1303 dans le forum Access
    Réponses: 2
    Dernier message: 11/10/2005, 09h33

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