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

Langage Java Discussion :

Questions sur l'inclusion de librairies C


Sujet :

Langage Java

  1. #1
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut Questions sur l'inclusion de librairies C
    Bonjour

    Voilà.. J'aimerais porter un TRES gros projet opérationnel et critique
    (+700 000 lignes de code : C / Unix/Linux / XWindows/Motif) sous
    Windows.

    Je me pose beaucoup de questions sur les outils les mieux adaptés et
    les plus faciles, et en même temps les plus prometteurs d'une longue
    vie.

    En particulier, dans ce projet, qui est développé "en couches", j'ai un
    certain nombre (représentant 80% du code) de librairies en C (static
    .a).

    D'où ma question :

    Je lis que contrairement au C, Java ne permet pas l'utilisation de
    pointeurs que ce soit en sortie de fonctions ou en pour se déplacer
    dans un tableau.

    Cependant je lis aussi qu'on peut avec des méthodes dites "natives"
    linker avec des librairies de C.


    Que se passe-t-il donc quand ces librairies font ce genre de
    manipulation ?



    Si la réponse est qu'on ne peut pas, alors j'abandonne tout de suite (9
    ans de développement, je ne vais pas refaire ça..).

    Et enfin quesion subsidiaire si la réponse à la question ci-dessus est
    qu'on peut : une de ces librairies gère la communication avec des
    serveurs via les sockets (code HTTP original). Peut-elle s'intégrer ou
    vaut-il mieux la réécrire ?

    Merci d'avance

  2. #2
    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,

    Citation Envoyé par souviron34
    Que se passe-t-il donc quand ces librairies font ce genre de manipulation ?
    Rien de spécial. Pourquoi ?

    Citation Envoyé par souviron34
    Si la réponse est qu'on ne peut pas, alors j'abandonne tout de suite
    Je vois mal comment on pourrait répondre "non" à ce type de question ! Tu as du mal exprimé ce que tu voulais dire...

    Citation Envoyé par souviron34
    une de ces librairies gère la communication avec des
    serveurs via les sockets (code HTTP original). Peut-elle s'intégrer ou
    vaut-il mieux la réécrire ?
    Je ne sais pas ce que tu veux dire par "code HTTP original', mais le protocol HTTP est géré de manière simpliste par la classe URL, et si tu veux quelque chose de plus poussé tu peux te tourner vers Jakarta Commons HttpClient...


    a++

  3. #3
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Porter +700000 lignes de C (dont 80% lib. static) depuis Unix/Linux+XWindows/Motif vers Windows ?

    Quelque soit le langage, ca implique du re-developpement.

    Et en ce qui concerne les langages O.O. (Java, C#, C++, ...), ca implique une re-conception: le paradigme Objet ne colle pas bien aux librairies statiques.

    Avec un bon reverse enginnering, il faudrait extraire la moelle "metier" de ton code C et soit la recoder en java, soit la mettre dans une dll pour l'utiliser depuis java (methodes natives).

    Tout le reste (specifique unix ou X11) il faudra le recoder.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Je vais précser, puiqu'il semble que je n'ai pas été parfaitement clair :

    code HTTP = fichiers sources C du CERN gèrant les connections/déconnections par sockets linux/Unix.

    Ma question sur les librairies statiques vient du fait que dans la FAQ et les user's guide je trouve :

    - contrairement au C, Java ne permet pas l'utilisation de
    pointeurs que ce soit en sortie de fonctions ou en pour se déplacer
    dans un tableau.
    - Avec des méthodes dites "natives" on peut linker avec des librairies de C.

    Donc si une librairie C contient des routines qui font de la manipulation de pointeurs, que se passe-t-il si on veut la linker dans Java ?

    Est-ce que cela refuse de linker ? d'éxécuter ? ou est-ce que ça passe parce que c'est a l'intérieur de la librairie ?

    Enfin, pour pseudocode, oui je sais bien. Mais c'est bien pour ça que je voudrais minimiser le travail.. Je cherche donc l'outil qui serait le plus adapté. Je sais qu'il me faut au moins refaire le GUI.Mais comme c'est la plus petite partie, j'aimerais bien que ce soit limité à ça...

    Sinon ce sera peut-être avec cygwin pour compiler les librairies C, et l'interface avec VC++ou BC++... si ça s'avère trop compliqué à faire avec Java...

  5. #5
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par souviron34
    Donc si une librairie C contient des routines qui font de la manipulation de pointeurs, que se passe-t-il si on veut la linker dans Java ?

    Est-ce que cela refuse de linker ? d'éxécuter ? ou est-ce que ça passe parce que c'est a l'intérieur de la librairie ?
    Tu as le droit de faire tout ce que tu veux dans ta dll: utiliser des pointeurs, faire des appels a des API du noyau, ...

    Les seules contraintes imposées par java sont sur le nom et la signature des fonctions appelées depuis JAVA (i.e. les points d'entrées). La JVM utilise des structures C (ou des classes en C++) bien précises pour le passage des parametres et la valeur de retour. Mais une fois que tu as codé ces fonctions "interfaces" entre la JVM et le C/C++, tu es libre.

    Coté java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class ReadFile {
      static {
         System.loadLibrary("ma_librairie_sans_extension_dll");
      }
      native public byte[] loadFile(String name); // déclaration coté java
    }
    Coté dll
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #include <jni.h>
     
    JNIEXPORT jbyteArray JNICALL Java_ReadFile_loadFile (JNIEnv * env, jobject jobj, jstring name) {
    ... // code de la fonction coté C
    }
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Ahhh!!Tu me rassures là...

    Je m'entends ( ) pousser un gros ouf de soulagement...

    Ca voudrais dire qu'en fait je pourrais juste faire un DLL d'interfaçage, dont les déclarations seraient ce que tu dis (Java) et qui appellerais les fonctions des librairies C statiques ?

    Bon en fait bien que ce soit du C la conception était très orientée objet, mais je voudrais réellement éviter de changer de langage (c'est opérationnel depuis 10 ans, et comme c'est critique j'ai pas envie de rajouter des bugs dans la fonctionalité).

    Si donc cette solution pouvait marcher, ce serait l'idéal...

    Et tant que j'y suis je vais vous poser une autre question, bien que n'étant pas forcément dans le bon forum, mais au moins avoir votre avis.

    Etant nouveau dans le monde la programmation sous Windows (à part 1 an de VB et 1 an de Delphi il y a 10ans), quel outil conseillerez-vous pour faire ce projet (c'est-à-dire construire le GUI) :Java (Eclipse ?), Devc++, VC++, autre ?

    C'est une application scientifique professionnelle, avec affichage graphique complexe et calculs.
    [il y a environ une quinzaine de fenêtres, mais par contre elles sont complexes (plus de 60 widgets dans chaque) et c'est très pointu en affichage graphique, gourmand, avec possibilité de faire changer de couleur de 2 à 20 000 symboles sur un fond d'image si possible en moins d'un 1/10 seconde]

Discussions similaires

  1. [Red-Hat 4.1.2-42][Python 2.4] Question sur librairie Paramiko
    Par Bahan_auboulot dans le forum Général Python
    Réponses: 1
    Dernier message: 24/11/2009, 19h18
  2. Question sur les inclusions de fichier.
    Par Krishna dans le forum C++
    Réponses: 5
    Dernier message: 22/04/2009, 20h07
  3. Question sur les inclusions
    Par Sekigawa dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 03/04/2008, 11h52
  4. Question sur les librairies libcurl et libxml2
    Par willowcat dans le forum Linux
    Réponses: 0
    Dernier message: 20/07/2007, 14h32
  5. Question sur les librairies .lib
    Par elvivo dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 05/10/2005, 20h06

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