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

MFC Discussion :

[JNI] Cr�ation d'une jvm impossible


Sujet :

MFC

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    88
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Avril 2004
    Messages : 88
    Par d�faut [JNI] Cr�ation d'une jvm impossible
    Bonjour,

    Je suis en train de r�aliser un petit programme qui permettrai d'utiliser du code java (classe d�j� existante) dans un logiciel r�alis� en C/C++ sous Visual C++ 6. Pour ce faire j'ai fait pas mal de recherche qui m'on conduit sur le chemin de JNI (utiliser le plus souvent pour faire l'inverse mais bon).

    J'ai donc trouv� un exemple (ici) sur lequel je m'inspire mais sans parvenir � cr�er la JVM�

    J�ai cr�er un projet de base en Win32 Console Application. J�ai li� les r�pertoires C:\j2sdk1.4.2_07\include et C:\j2sdk1.4.2_07\include\win32 pour jni.h ainsi que jni_md.h. Apr�s l�avoir fait il me manque jvm.lib� Je met cette librairie dans le projet� Aucune erreur� A l�ex�cution j�ai un message d�erreur qui dit "Erreur manque jvm.dll" (en gros )� je fais une recherche, en trouve plusieurs mais je ne sait pas lequel prendre et comment l�inclure au projet�

    J�ai tester d�en mettre une dans system32 puis dans mon r�pertoire de projet et je n�ai plus l�erreur mais toujours aucune jvm de cr�er�

    Voici mon code pour r�aliser cette exemple :
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    #include "stdafx.h"
    #include <iostream.h>
    #include <jni.h>
     
    JNIEnv          *env;
    JavaVM          *jvm;
    jclass          cls;
    jmethodID       mid;
    jobject         obj;
    jint            res;
    JavaVMInitArgs  vm_args;
    JavaVMOption    options[1];
     
    int creationJVM()
    {
    	jint res;
     
    	char classpath[1024];
     
    	sprintf(classpath, "%s", "-Djava.class.path=.:./lib");
    	options[0].optionString = classpath;
    	vm_args.version = JNI_VERSION_1_4;
    	vm_args.options = options;
    	vm_args.nOptions = 1;
    	vm_args.ignoreUnrecognized = 1;
     
    	res = JNI_CreateJavaVM(&jvm, (void **) &env, &vm_args);
     
    	if (res < 0)
    	{
    		return 0;
    	}
     
    	return 1;
    }
     
    int main(int argc, char* argv[])
    {
    	int testCrea;
    	testCrea = creationJVM();
     
    	if (testCrea == 0)
    	{
    		cout << "Impossible de créer la JVM." << endl;
    	}
     
    	//cls = env->FindClass("TestJni");
     
    	if (!cls)
    	{
    		cout << "Impossible de charger TestJni.class" << endl;
    		return 0;
    	}
     
    	//jvm->DestroyJavaVM();
     
    	return 0;
    }
    R�sultat de l'execution:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    Impossible de crÚer la JVM.
    Impossible de charger TestJni.class
    Press any key to continue
    En esp�rant pouvoir avoir de l�aide de votre part� (et avoir �t� clair )

    Hannubis

  2. #2
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    je ne connais pas du tout JNI, mais essaie peut-etre de charger la dll dynamiquement avec LoadLibrary, plutot que de passer par les libs

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    88
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Avril 2004
    Messages : 88
    Par d�faut
    Merci pour ta r�ponse rapide nico-pyright(c) !!! je vais tester ca ... m�me si j'ai des doutes !! On va voir je vous tiens au jus

    Hannubis

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    88
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Avril 2004
    Messages : 88
    Par d�faut
    Citation Envoy� par nico-pyright(c)
    je ne connais pas du tout JNI, mais essaie peut-etre de charger la dll dynamiquement avec LoadLibrary, plutot que de passer par les libs
    Ne marche pas qd m�me . D'autres id�es??

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    88
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Avril 2004
    Messages : 88
    Par d�faut
    Personne n'a utilis� ca ?? personne peut m'aider ??

  6. #6
    Membre chevronn�
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Par d�faut
    je pense que une personne sur le site de la jni serait plus apte a te repondre

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    88
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Avril 2004
    Messages : 88
    Par d�faut
    Tout les site qui parle la jni fond l'inverse a peu pr�s !!! et je n'ai pas trouv� de site propre a la jni sauf celui que j'ai cit� dans mon premier post mais j'arrive pas a la faire marcher qd m�me...

  8. #8
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    88
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Avril 2004
    Messages : 88
    Par d�faut
    Apres de nombreuse recherche je n'ai toujours rien trouv� de plus et j'en suis toujours au m�me point.

    N'y a t il personne qui est d�j� utilis� jni pour un cas comme celui ci ?? Personne peut m'aider ??

  9. #9
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 2
    Par d�faut
    Voici un code qui fonctionne. Il est important de fournir le "jvm.dll" exact du JRE install� sur ta machine, avec son path absolu dans l'appel du LoadLibrary().

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    #ifdef __BORLANDC__
      #pragma argsused
    #endif
     
    #ifdef _WIN32
    #define PATH_SEPARATOR ';'
    #else
    #define PATH_SEPARATOR ':'
    #endif
     
    #include <jni.h>
    #include <windows.h>
     
     
    /**
    *  You can find all installed JVMs' information in the Registry:
    *  HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment
    */
     
     
    // typedef of functions needed to create the JVM dynamically
    typedef jint (JNICALL GetCreatedJavaVMs_t)( JavaVM**, jsize, jsize* );
    typedef jint (JNICALL CreateJavaVM_t)( JavaVM**, void **, void* );
     
    // pointer declaration of those functions
    GetCreatedJavaVMs_t *GetCreatedJavaVMs;
    CreateJavaVM_t *CreateJavaVM;
     
    // handling reference to jvm.dll
    HINSTANCE hJvmDll;
     
     
    int main( int argc, char * argv[] )
    {
      jsize  nVMs;
      // pointer to the Virtual Machine instance interface
      JavaVM *jvm = (JavaVM *)0;
      // pointer to the thread instances interface which invokes Native APIs
      JNIEnv *env = (JNIEnv *)0;
     
      JavaVMInitArgs vm_args;
     
      jint status = -1;
      jclass cls;
      jmethodID mid;
      jint square, argsres;
      jboolean bNot;
     
      JavaVMOption options[1];
      options[0].optionString = "-Djava.class.path=.";
    //  options[1].optionString = "-verbose";
     
     
      size_t bufLen = 1;
      jvm = (JavaVM *) malloc( sizeof(JavaVM) * bufLen );
     
      char debugStr[256];
     
      hJvmDll =
       LoadLibrary( "C:\\Program Files\\Java\\jre1.5.0_04\\bin\\client\\jvm.dll" );
     
      if ( hJvmDll != NULL )
      {
         GetCreatedJavaVMs =
           (GetCreatedJavaVMs_t*)GetProcAddress( hJvmDll, "JNI_GetCreatedJavaVMs" );
     
         CreateJavaVM =
           (CreateJavaVM_t*)GetProcAddress( hJvmDll, "JNI_CreateJavaVM" );
     
         if ( GetCreatedJavaVMs != NULL && CreateJavaVM != NULL)
            {
              status = GetCreatedJavaVMs( &jvm, bufLen, &nVMs);
     
              if ( status == JNI_OK )
              {
                  sprintf( debugStr, "There are %d VM(s) running\r\n", nVMs );
                  printf(debugStr);
              }
     
              if (nVMs == 0)
              {
                 vm_args.version = JNI_VERSION_1_4;
                 vm_args.options = options;
                 vm_args.nOptions = 1;
                 vm_args.ignoreUnrecognized = JNI_TRUE;
     
                 status = CreateJavaVM( &jvm, (void**) &env, &vm_args );
                 if ( status == JNI_OK )
                 {
                    sprintf( debugStr, "Launching VM okay.\r\n" );
                    printf(debugStr);
                 }
              }
            }
      }
     
     
      if (status == JNI_OK)
      {
          cls = (env)->FindClass("Sample2");
          if(cls !=0)
          {   mid = (env)->GetStaticMethodID( cls, "intMethod", "(I)I");
    	        if(mid !=0)
    	        {  square = (env)->CallStaticIntMethod(cls, mid, 5);
    		       printf("Result of intMethod: %d\n", square);
    	        }
     
    	        mid = (env)->GetStaticMethodID(cls, "booleanMethod", "(Z)Z");
    	        if(mid !=0)
     	        {  bNot = (env)->CallStaticBooleanMethod(cls, mid, 1);
     		       printf("Result of booleanMethod: %d\n", bNot);
     	        }
          }
          (jvm)->DestroyJavaVM();
          return 0;
      }
      else
         return status;
    }
    Bonne chance.

  10. #10
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    88
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Avril 2004
    Messages : 88
    Par d�faut
    Citation Envoy� par ahpoon
    Voici un code qui fonctionne. Il est important de fournir le "jvm.dll" exact du JRE install� sur ta machine, avec son path absolu dans l'appel du LoadLibrary().

    ...

    Bonne chance.
    Salut ahpoon et merci pour ta r�ponse et ton code. D'apres les test de celui ci la jvm est cr��. Mais apres avec l'appel a la m�thode java ca n'a pas l'air de marcher.

    Pourrais-tu me dire comment proc�der pour le code en java, ou le mettre ... ??

  11. #11
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 2
    Par d�faut
    Le code JAVA qui va avec mon exemple sample2.cpp.

    Compile ce code et place son "byte code" dans le meme emplacement que l"exec produit en 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    /*
     * Created on Mar 20, 2006
     *
     * To change the template for this generated file go to
     * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
     */
     
    /**
     * @author user
     *
     * To change the template for this generated type comment go to
     * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
     */
    public class Sample2 {
    	public static int intMethod(int n)
    	{
    		return n*n;
    	}
     
    	public static boolean booleanMethod(boolean bool)
    	{
    		return !bool;
    	}
     
    	public static void main(String[] args) {
    		System.out.println(Sample2.intMethod(3));
    		System.out.println(Sample2.booleanMethod(false));		 
    	}
    }

Discussions similaires

  1. R�ponses: 7
    Dernier message: 31/07/2009, 11h53
  2. NetBeans, cr�ation d'une application java impossible
    Par kokusho dans le forum NetBeans
    R�ponses: 2
    Dernier message: 25/11/2007, 16h33
  3. R�ponses: 4
    Dernier message: 31/07/2007, 18h02
  4. R�ponses: 7
    Dernier message: 12/05/2006, 17h21
  5. [Plugin][MYECLIPSE]Impossible de trouver une JVM
    Par tolsam dans le forum Eclipse Java
    R�ponses: 3
    Dernier message: 08/08/2004, 20h46

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