begin process at 2012 05 30 02:34:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

System

 > 

JNI natif -> Java - appeler java depuis une fonction callback???


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

JNI natif -> Java - appeler java depuis une fonction callback???

mercredi 9 juillet 2008 à 09:00:17 | JNI natif -> Java - appeler java depuis une fonction callback???

rachmasse

salu,


Voila j'essaye depuis plusieurs jours deja  de faire remonter à JAVA mes evenements detectés grace aux fameux hook.
Le problème est que je n'arrive à rien depuis les fonctions callback (procedure qui releve les evenements ). aucune variable globale n'est valide.
Ce que je fais actuellement :
- sauvegarde de la JavaVM en variable globale grace à JNI_OnLoad
- utilisation de cette var globale depuis la fonction callback


est ce que quelqu'un a une idée?

mercredi 9 juillet 2008 à 10:34:17 | Re : JNI natif -> Java - appeler java depuis une fonction callback???

rachmasse

pas d'idées?
mercredi 9 juillet 2008 à 13:56:57 | Re : JNI natif -> Java - appeler java depuis une fonction callback???

juju12

Je connais pas du tout Java; cependant si tes hooks sont globaux ou ciblent d'autres processus, il faut savoir que les callbacks seront appelées dans le contexte du (ou des) programme(s) cible(s). Par conséquent il n'y a aucun partage de variables puisque tout se passe dans des espaces d'adressages différents. Si tu veux passer des valeurs entre ton programme source et les hooks, il faut utiliser de la mémoire partagée, par exemple avec l'API Windows CreateFileMapping() et MapViewOfFile().
mercredi 9 juillet 2008 à 14:38:14 | Re : JNI natif -> Java - appeler java depuis une fonction callback???

rachmasse

ok j'ai deja utilisé cet technique qui marche trés bien en effet pour echanger des données style entier ou caractère .
Par contre lorsque j'essaye de sauvegarder le pointer de la JVM crée et de le faire passer à ma methode callback, ca ne semble pas marcher.
Pourtant j'initialise bien le pointer et quand je suis dans ma fonction callback j'ai  verfiié que  le pointeur est bien different de null mais il semble erroné.


mercredi 9 juillet 2008 à 18:14:25 | Re : JNI natif -> Java - appeler java depuis une fonction callback???

juju12

en cas de pointeur c'est différent;
un pointeur est valable seulement dans l'espace mémoire dans lequel il a été référencé. Donc tu ne peux pas simplement le passer à une autre application, puisque ce ne sera pas le même contexte et donc la même valeur pointera sur tout à fait autre chose. Tu peux par contre peut-être utiliser ReadProcessMemory(), qui permettra depuis ta callback, à partir du pointeur du processus de base, de lire la mémoire dans le processus de base. Cependant, ceci permet seulement de copier la mémoire dans un nouveau buffer.
Je ne vois pas trop ce que tu veux faire en fait (comme dit j'y connais rien à Java), mais ne serait-il pas plus simple, à partir de la callback, d'envoyer des messages vers le processus source où le traitement serait assuré (parce que du coup tu seras dans le bon espace mémoire)?
jeudi 10 juillet 2008 à 09:13:21 | Re : JNI natif -> Java - appeler java depuis une fonction callback???

rachmasse

bien joué l'idée des messages !merci de m'aider c cool.
ca pourrait etre une solution, parcontre tu pourrais me dire comment envoyer des messages entre different processus???
il me semble que ca marche avec des SIGNAL mais je suis plus trés sur du fonctionnement




++
jeudi 10 juillet 2008 à 12:02:00 | Re : JNI natif -> Java - appeler java depuis une fonction callback???

juju12

Réponse acceptée !

Il y a toute une série de fonctions associées dans l'API :
SendMessage() // à une fenêtre, attend la réponse
PostThreadMessage() // à un thread , retourne immédiatement
...

Le mieux serait je pense, si tu n'as pas besoin de réponse du programme source, d'utiliser PostThreadMessage(), parce que SendMessage s'adresse à une fenêtre donc si tu n'en n'as pas...
Tu peux définir tes messages personnalisés à partir de WM_USER, par exemple :
#define WM_PERSO_0 (WM_USER+2)
etc...

Par contre du coup dans ton programme source tu devras avoir une boucle de récupération de message.
Je ne sais pas si tu y es familier, dans le cas contraire :

MSG msg;
msg.message=WM_NULL;
while(msg.message!=WM_PERSO_QUIT) // par exemple
{
       GetMessage(&msg,NULL,WM_NULL,WM_NULL);
       switch(msg.message)
      {
            case WM_PERSO_0:
             ...
      }
}
Simple à comprendre : GetMessage() récupère les messages dans la file du thread, et tu boucles tant que tu n'as pas reçu l'ordre de sortir (WM_PERSO_QUIT). Par contre, faudra penser à le donner, cet ordre, depuis ton hook! Par exemple si l'application hookée se termine etc... Bien sûr tu peux mettre n'importe quelle autre condition dans le while à la place du message quitter, genre un temps limite...


La fonction PostThreadMessage() a besoin de l'ID du thread auquel envoyer le message, ce qui veut dire que tu dois lui passer cette information : c'est là qu'intervient CreateFileMapping() et compagnie.
Tu pourras récupérer l'ID du thread de ton programme source, par exemple avant d'installer le hook, par GetCurrentThreadId().


Bon si tu veux un exemple concret j'avais déposé une source de hook sur le notepad, où tu pourras trouver mémoire partagée, hooks et envoi de messages entre callback du hook et programme principal.
http://www.cppfrance.com/codes/PERSONNALISER-APP-CHANGER-COULEUR-POLICE-NOTEPAD_44037.aspx
Il y en a plein d'autres sur le site.

jeudi 10 juillet 2008 à 13:36:54 | Re : JNI natif -> Java - appeler java depuis une fonction callback???

rachmasse

merci mille fois, c la grande classe je pense que ca va le faire!!!!




Cette discussion est classée dans : fonction, java, globale, callback, jni


Répondre à ce message

Sujets en rapport avec ce message

fonction de callback [ par veve33 ] Bonjour,j'aimerais savoir comment faire du callback en c pour compiler sous unix mais aussi sous windows surement a terme.Mon but etant de faire une l Utilisation d'une fonction callback [ par laurentl2000 ] Bonjour, Voici une fonction callback destinée à envoyer les titres des fenêtres IE ouvertes dans une listbox... BOOL CALLBACK EnumWindowsProc(HWND hwn declarer une variable globale [ par EricLeRouge ] J'aimerai savoir comment declarer une varible (par ex un int) en globale dans le cas d'un projet avec plusieurs fichiers. Si je cree un .h ou je decla Accèder à un objet depuis Fonction membre de callback statique [ par Jeffray ] Bonjour,J'ai une fonction membre statique de callback, qui correspond à une classe de fenêtre que j'enregistre.Comment faire pour transmettre à cette [JNI] Probleme de creation d'une JVM dans c++ [ par vincy the pooh ] Boinjour,je cherche a creer une JVM par JNI afin d'executer un programme java a partir d'une DLL c++.Pour debuter, je me suis penché sur le invoke.c e fonction callback en c++ [ par gbcha ] Je voudrais comprendre à quoi sert et comment marche une fonction dite "callback" ?Mercigbcha Faire une callback vers un exe dans un callback hook d'une dll [ par Suisse00 ] Salut :) J'ai créer un hook sur le clavier dans une DLL, dans le callback du hook j'aimerais faire un callback vers une fonctoin du fichier exe. J'ar variable globale ou non [ par fcbouan ] quel es la bonne approche , utiliser par exemple une variable globale de buffer gMonbuffer[TAILLE] et l utiliser dans une fonction ( ecriture dans un Adresse d'une fonction CallBack dans une classe [ par Capa6T ] Bonjour, J'ai un petit souçis pour récupèrer l'adresse d'une fonction CallBack dans une classe. MaClasse.h : ------------ class MaClasse { protected Pointeur sur fonction ? [ par tintin72 ] Bonjour, J'ai un petit souci avec les pointeurs sur fonction. Voilà, j'ai une fonction qui prend comme argument un pointeur sur fonction: void maFonct


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,916 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales