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 :

Utilisation d'un code C dans Java


Sujet :

API standards et tierces Java

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 53
    Points : 24
    Points
    24
    Par défaut Utilisation d'un code C dans Java
    Bonjour,

    Je voudrais savoir comment on fait pour utiliser du code C en Java?

    En C# on fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
            public static extern IntPtr GetForegroundWindow();
    En Java je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	/** @dll.import("USER32") */
    	private static native int GetForegroundWindow();
    Mais en Java ça ne marche pas...

    Si vous avez une idée, merci à vous!

    Go

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    C'est simple en java on n'importe pas la plupart des DLL.
    Le seul moyen est d'écrire une DLL remplissant certaines conditions permettant de communiquer avec java (donc grosso modo tu crées un DLL wrappant la DLL que tu veux utiliser).

    Puis tu communiques entre java et cette DLL au moyen de JNI.

    Pour plus d'infos sur JNI:
    La spec de JNI:
    http://java.sun.com/javase/6/docs/te...ec/jniTOC.html

    Une FAQ:
    http://java.sun.com/products/jdk/faq/jni-j2sdk-faq.html

    Puis il existe des pelletées de tutoriels et de cours traitant de JNI sur le net, je te laisse faire ta recherche sur ton moteur de recherche préféré

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 53
    Points : 24
    Points
    24
    Par défaut
    Merci de ta réponse.

    Par contre je tente désespérémment de compiler sous l'invite de commande dos un fichier C avec la commande suivante :

    cl -I "c:\java\include" -I "c:\java\include\win32" -LD app_HelloWorld.c -Fehello.dll

    'cl.exe' n'est pas reconnu en tant que commande interne
    ou externe, un programme exécutable ou un fichier de commandes.

    ça ne marche pas en gros...
    j'ai fait une recherche sur mon disque dur d'un fichier cl.exe mais j'en ai un uniquement dans visual studio 2005.
    En créant un projet sous visual studio 2005 je ne sais pas où placer l'option -Fehello.dll.

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 53
    Points : 24
    Points
    24
    Par défaut
    J'ai mon fichier .h :

    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
     
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class app_HelloWorld */
     
    #ifndef _Included_app_HelloWorld
    #define _Included_app_HelloWorld
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     app_HelloWorld
     * Method:    displayHelloWorld
     * Signature: ()V
     */
    JNIEXPORT void JNICALL Java_app_HelloWorld_displayHelloWorld
      (JNIEnv *, jobject);
     
    #ifdef __cplusplus
    }
    #endif
    #endif
    et mon fichier .c :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <jni.h>
    #include "app_HelloWorld.h”
    #include <stdio.h>
     
    JNIEXPORT void JNICALL 
    Java_app_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) {
        printf("Hello world!\n");
        return;
    }
    Lors de la compilation Visual me pointe 2 erreurs sur la ligne du .c à : #include "app_HelloWorld.h” en disant :

    -Error 1 error C2001: newline in constant c:\documents and settings\Go\bureau\compile_jni_visual\jni_visual2\app_helloworld.c 2

    -Error 2 fatal error C1083: Cannot open include file: 'app_HelloWorld.h”': No such file or directory c:\documents and settings\Go\bureau\compile_jni_visual\jni_visual2\app_helloworld.c 2



    Si vous avez une idée...

    Merci d'avance!

    Go

Discussions similaires

  1. Utilisation d'un code AS3 dans mon flipbook flash
    Par thom62220 dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 07/12/2011, 13h26
  2. Utiliser un code MATLAB dans du code Java
    Par si_a7med dans le forum MATLAB
    Réponses: 1
    Dernier message: 23/04/2011, 16h30
  3. Utilliser du code matlab dans Java
    Par mehdiing dans le forum MATLAB
    Réponses: 1
    Dernier message: 06/05/2007, 11h36
  4. utilisation de jump ou de goto dans java
    Par dracula2000 dans le forum Langage
    Réponses: 5
    Dernier message: 06/03/2006, 11h27
  5. [CR] Utilisation de codes à barres dans crystal
    Par franck.cvitrans dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 29/06/2004, 08h48

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