begin process at 2010 02 10 03:21:44
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Systeme

 > APPELER DES APIS SANS PROGRAMMATION JNI

APPELER DES APIS SANS PROGRAMMATION JNI


 Information sur la source

Note :
Aucune note
Catégorie :Systeme Classé sous :jni, système, api, windows, plugin Niveau :Initié Date de création :03/08/2006 Date de mise à jour :06/08/2006 01:20:49 Vu / téléchargé :6 075 / 419

Auteur : DeadlyPredator

Ecrire un message privé
Site perso
Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

 Description

Ce code permet d'appeler une API windows, seulement en appelant une seule fonction que j'ai créé en JNI. Son utilisation est assez simple quoique un peu délicate. Ne supporte pas encore les structures mais à venir.


 Conclusion

Ce code résume tout:
try {
Object[] params = {new Integer(0), "allo", "xxx", new Integer(3)};
String[] types = {"int", "string", "string", "int"};
System.out.println(DPsAPICaller.callAPI("U ser32.dll", "MessageBoxA", params, types, 4));
} catch (Exception e) {
e.printStackTrace();
}

La fonction doit être dans un try. Vous devez
1- créé un tableau D'OBJECTS contenant CHAQUE paramètre
2- créé un tableau de STRINGS contenant le type de chaque paramètres en minuscule
vous pouvez aussi passez un pointeur 32bits avec le type ptr. j'ai ajouter cela car je vais faire une source qui va créer des structures dans la mémoire et donner leur pointeur car bien des apis marchent avec des structures.
3- appeler DPsAPICaller.callAPI avec chaque paramètre ET INDIQUEZ VOUS MÊME LE NOMBRE DE PARAMÈTRES. Le tableau peut contenir plus de paramètres que le nombre indiqué.

Les types suivant sont à tester car ils sont en warning:
char
byte
boolean

Il est possible qu'il faut les passer en autre chose avec l'assembleur

byte n'est pas encore implenté

ATTENTION!!! SI JAMAIS VOUS NE DONNEZ PAS LE BON NOMBRE DE PARAMÈTRES POUR L'API, LE STACK NE VA PAS AIMEZ ÇA ET CELA VA CRÉER UN CRASH DU PROGRAMME.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

03 août 2006 23:19:10 :
Modification de byte/char pour les rendres différents l'un de l'autre Ajout d'une sécurité pour détecter si le type est pris en charge Compilation en mode release pour augmenter les performances de la Dll
06 août 2006 01:20:49 :
Ajout de commentaires ... Ne regardez pas les classes CString et CStructure. Elles sont là à des fins de test

 Sources du même auteur

Source avec Zip Source avec une capture CALCULER UNE ÉQUATION MATHÉMATIQUE COMPLEXE DANS UN STRING E...

 Sources de la même categorie

Source avec Zip Source avec une capture ZFS GESTION DU BOOTLOADER par 78.ultima
RECHERCHE LDAP AVEC PAGINATION par caiman125
Source avec Zip Source avec une capture CLASSEXPLORER : EXPLORATEUR DE CLASSES JAVA par Chatbour
Source avec Zip APPLICATION DES SEMAPHORE POUR LA RESOLUTION DU PROBLEME DES... par shaft_amine
Source avec Zip JAVA ET TERMINAL-CAPABILITY par sheorogath

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture [ANDROID] FAITES PARLER VOTRE NABAZTAG par EBArtSoft
Source avec Zip CONTENEUR DE COMPOSANT HETEROGENES par mad_charif
Source avec Zip Source avec une capture UTILISER LES APIS FACEBOOK A TRAVERS SWING par titeuf921
Source avec Zip APPLICATION DES SEMAPHORE POUR LA RESOLUTION DU PROBLEME DES... par shaft_amine
Source avec Zip JAVA ET TERMINAL-CAPABILITY par sheorogath

Commentaires et avis

Commentaire de Twinuts le 03/08/2006 23:52:01 administrateur CS

Salut,

merci de mettre des commentaires dans le code en C++ et de faire un contrôle sur l'OS dans le code java pour ne pas faire d'appel à la DLL ou alors met l'equivalent linux !

Commentaire de DeadlyPredator le 04/08/2006 00:13:47

Je ne connais rien à linux (mais ca va changé à la fin de mes cours) donc je ne peux pas donner un équivalent en linux. De plus, je ne crois pas que le stack et les dlls fonctionnent de la même façon sous cet os. Je vais essayer de mettre des commentaires dans la source c++.

Message important:
Les pointeurs ne sont pas supportés donc les paramètres OUT ne marcheront pas. Je vais étudier ça et donner la solution bientot. C'est sur ma TODO list avec les structures, les autres conventions d'appel et les commentaires. Et j'oubliais, utiliser seulement des apis avec la convention d'appel _stdcall car utiliser _cdecl ferait planté le programme car je n'ai pas encore placé le code pour décalé ESP à la fin. Même chose pour _fastcall.

Commentaire de Twinuts le 04/08/2006 09:23:03 administrateur CS

Salut,

sous linux la gestion des dll ne se fait pas du tout mais vraiment pas comme sous Windows... Donc si tu n'y connais rien à linux arrange toi au moins que si j'utilise ton appli je me pete pas les erreurs de dépendance... exemple:

static {
  if(System.getProperty("os.name").startWith("Windos"))
     System.loadLibrary("DPsAPICallerLib");
}

et de meme dans le code soit le mieux serait de faire

private native static int callAPI0(String moduleName, String APIName, Object[] parameters, String[] parametersTypes, int nbValues) throws Exception;

public static int callAPI(String moduleName, String APIName, Object[] parameters, String[] parametersTypes, int nbValues) throws Exception{
     if(System.getProperty("os.name").startWith("Windos"))
          return callAPI0(moduleName, APIName, parameters, parametersTypes, nbValues);
     else
          return -1;
}


apres pour le code C++ et CStructure.java je ne les lirai qu'une fois les commentaires présent et pense vraiment à les mettres avant toute modifications !!!



Question le nom de ta source "APPELER DES APIS SANS PROGRAMMATION JNI" tu y trouve pas un truc incohérent? tu trouve toi qu'il n'y a pas de JNI ?

Commentaire de DeadlyPredator le 06/08/2006 00:33:05

Attention, je veux dire par là, si vous voulez utiliser des APIs pour vos prog, vous n'aurez pas besoin d'avoir vous mêmes besoin de coder le JNI et vous pourrez tout faire en java. Cependant, et c'est la le gros hic c que on oublie linux pour l'instant, il est impossible d'utiliser des structures encore moins les pointeurs qui vont créer à coup sûre un acces violation. Je me renseigne afin de trouver une façon de tout faire fonctionner mais c'est difficile car le code présente de nombreuses contraintes à cause de java et de la sécurité dans windows.

Commentaire de Twinuts le 06/08/2006 00:55:16 administrateur CS

Salut,

DeadlyPredator merci de prendre en compte mon MP

Commentaire de DeadlyPredator le 06/08/2006 01:22:59

J'ai trouvé une bonne utilité à cette fonction, elle pourra servir à un système de plugins natifs car de cette façon les contraintes ne dérangeront pas trop. Pi oui!!! les commentaires sont enfin arrivés dans le code

Commentaire de Twinuts le 06/08/2006 01:53:37 administrateur CS

Merci pour les commentaires et le teste (pas besoin de faire un substr si tu fais un startwith limite fait un toLowerCase ou upper)

Commentaire de DeadlyPredator le 06/08/2006 04:52:57

lol, c étrange mais chez moi, ton startwith ne marche pas. JDK différent?

Commentaire de DeadlyPredator le 06/08/2006 05:01:01

Je rappelle que vous devez vous assurez que jamais la fonction sera appelé avec le mauvais nombre et les bons types d'arguments car cela une telle erreur serait catastrophique. Utilisez seulement des apis avec des paramètres en in :short, string, int et celles qui retroune: void, int, short car string vous retournera un pointeur dont vous ne pourrez vous servir en java... pourquoi java ne supporterait-il pas les pointeurs dans une future version? C'est bon de rêver ...

Commentaire de DeadlyPredator le 06/08/2006 07:22:30

oops, je veux dire ou de mauvais types d'argument******

Commentaire de Twinuts le 06/08/2006 14:12:23 administrateur CS

Salut,

pour les type pourquoi tu n'utilise pas les classe de reflexion et ainsi cela restera completement transparent pour les utilisateurs

Commentaire de DeadlyPredator le 06/08/2006 22:41:26

Tu veux dire utiliser les fonction de la classe Class pour que mon fonction elle même détermine les types et fasse tout? Si oui, ça pourrais être bien. J'y avais pensé c'est seulement que trop automatisé le processus augmenterait les risques d'erreurs de la part de l'utilisateur.

Commentaire de Twinuts le 06/08/2006 22:46:33 administrateur CS

Salut,

nan il n'y a pas de risque que cela fasse des erreurs si de ton coté tu blinde la chose en plus tu peux aisiaiment le faire en JNI  ou alors polus simplement faire un couche d'apstraction java avant de donner cela a bouffer au JNI

Commentaire de didou71 le 04/10/2006 09:24:22

Sans passer les types, on peut les tester de cette façon, en utilisant la methode instanceof :

par exemple:

if(env->IsInstanceOf(objParam,  env->FindClass("java/lang/Integer")) == JNI_TRUE)

pour tester un argument de type integer.

L'idée général est très bonne, mais le code doit murir un peu,vit il encore ce code depuis ??

Commentaire de didou71 le 04/10/2006 09:56:48

pour connaitre le nombre de param pas besoin de la passer :

Jsize a_size = env->GetArrayLength(params) donne la longueur du tableau

Commentaire de didou71 le 19/10/2006 13:43:54

un petit tuyau :

http://java.sun.com/docs/books/jni/

charge le zip d'example et sharedStubs de sun, tu trouveras ce qu'il te manque !!

Il suffit de regénérer les fichiers header et de reconstruire la dll.

Bonne continuation

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

jni.h sous windows pour linux avec cygwin [ par Quazar ] Bonjour ;) Description du probleme: Je suis sous window et j'utilise cygwin. Ce qui signifie que j'ai acces a un environnement linux pour developper. api windows et JAVA [ par TheHugo ] Est ce que quelqu'un dans ce monde sait si c'est possible de communiquer avec L'API WINDOWS EN JAVA et si oui comment.Je souhaite subtituer le bureau Lire le registre Windows sans utiliser JNI [ par ybertrand2 ] Salut je voudrais lire le registre windows sans utiliser jniComment faire ? comment programmer une JNI sous windows [ par marissalille ] bonjour à tous je suis en stage et  travail actuellemnt sur un projet informatique, qui est sur deux partie un moteur de calcul en c++ et une inteface comment programmer une JNI sous windows [ par marissalille ] bonjour à tous je suis en stage et  travail actuellemnt sur un projet informatique, qui est sur deux partie un moteur de calcul en c++ et une inteface Surveillance de processus Windows avec Java [ par Hermios ] Salut à tous,Je souhaiterai pouvoir, avec java, vérifier si un processus windows a été lancé ou non.Malgré mes recherches, la seule piste que j'ai est api windows [ par malkovich ] est ce que je peux ecrire un programme en java qui teste dans word-->outils-->options-->imprimer si la case est cochée ou non? Les api Windows ... [ par Schouly ] Y a moyen en java de faire appel à une API (dll) de windows ... c'est pour faire un netsend sur un réseauBis ... Y a t'il moyen de lancer une applicat [JAVA] Creer un icone pour l`afficher dans la barre système windows [ par durje ] Bonjour j`espère que je pose ma question au bonne endroit dans le forum.. Voila mon problème, je récupère des informations de température d`un microc Java sous MAC, API JAVA MAC ? [ par davidfdm2002 ] Une application java sous Windows peut utiliser des DLL pour faire des actions purement windows.Une application java sous Mac elle utilise quoi ?Il y


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 0,484 sec (4)

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