Programmation de client ActiveX : Classes JClassProxy et JObjectProxy
La plupart des tâches d'accès aux classes et aux objets Java™ sont traitées par les objets JClassProxy et JObjectProxy.
JClassFactory est l'objet utilisé pour accéder à la majorité des fonctions de la JVM (Java Virtual Machine). Cet objet se charge de l'initialisation de la JVM, de l'accès aux classes et de la création d'instances de classes (objets). Utilisez les objets JClassProxy et JObjectProxy pour accéder à la plupart de vos objets et classes Java :
- XJBInit(String astrJavaParameterArray())
Initialise l'environnement de la JVM avec un tableau de chaînes représentant les paramètres de ligne de commande que vous envoyez normalement à java.exe.
Si vous placez des paramètres non valides dans le tableau de chaînes XJBInit(), l'erreur suivante s'affiche :Erreur : 0x6002 "XJBJNI::Init() Failed to create VM" when calling XJBInit()
Lorsque la journalisation C++ est activée, le journal d'activité affiche le paramètre non valide. - JClassProxy FindClass(String strClassName)
Utilise le chargeur de classe de l'unité d'exécution courante pour charger le nom de classe qualifié et renvoyer un objet JClassProxy représentant un objet classe Java.
- JObjectProxy NewInstance() Crée une instance Class pour l'objet JClassProxy spécifié en utilisant les paramètres fournis pour appeler le constructeur de classe. Pour plus de détails sur l'utilisation de la méthode JMethodArgs, reportez-vous à Passerelle ActiveX vers EJB, appel des méthodes Java.
JObjectProxy NewInstance(JClassFactory obj, Variant vArg1, Variant vArg2, Variant vArg3, ...) JObjectProxy NewInstance(JClassFactory obj, JMethodArgs args)
- JMethodArgs GetArgsContainer()
Renvoie un objet JMethodArgs (instance de classe).
Vous pouvez créer un objet JClassProxy à partir de la méthode JClassFactory.FindClass() et à partir de tout appel de méthode Java renvoyant normalement un objet Java de type Class. Vous pouvez utiliser cet objet comme si vous aviez un accès direct à l'objet Java Class. Tous les champs et méthodes statiques de la classe sont accessibles de la même manière que le sont les méthodes de java.lang.Class. En cas de conflit entre les noms des méthodes statiques de la classe utilisateur réfléchie et ceux des méthodes de java.lang.Class (par exemple, getName()), les méthodes statiques réfléchies sont exécutées en premier.
Par exemple, voici une méthode appelée getName(). L'objet java.lang.Class comporte également une méthode appelée getName() :- Sous Java:
class foo{ foo(){}; public static String getName(){return "abcdef";} public static String getName2(){return "ghijkl";} public String toString2(){return "xyz";} }
- Sous Visual Basic :
... Dim clsFoo as Object set clsFoo = oXJB.FindClass("foo") clsFoo.getName() ' Renvoie "abcdef" à partir de la classe statique foo clsFoo.getName2() ' Renvoie "ghijkl" à partir de la classe statique foo clsFoo.toString() ' Renvoie "class foo" à partir de l'objet java.lang.Class. oFoo = oXJB.NewInstance(clsFoo) oFoo.toString() ' Renvoie du texte à partir de la méthode toString() de ' java.lang.Object dont foo hérite. oFoo.toString2() ' Renvoie "xyz" à partir de l'instance de classe foo
Vous pouvez créer un objet JObjectProxy à partir de la méthode JClassFactory.NewInstance() et à partir de tout appel de méthode Java renvoyant normalement un objet Java de type Class. Vous pouvez utiliser cet objet comme si vous aviez un accès direct à l'objet Java et pouviez accéder à toutes les méthodes et zones statiques de l'objet. Toutes les méthodes et zones de l'instance d'objet sont accessibles (ce qui comprend celles accessibles par héritage).
L'objet JMethodArgs est créé à partir de la méthode JClassFactory.GetArgsContainer(). Utilisez cet objet comme un conteneur pour les arguments de méthode et de constructeur. Vous devez utiliser cet objet lorsque vous appelez une méthode en remplaçant le type d'objet qu'elle attend en argument (par exemple, lorsque vous envoyez un type JProxyObject java.lang.String à un constructeur qui, normalement, reçoit un java.lang.Object comme argument).
Vous pouvez utiliser deux groupes de méthodes pour ajouter des arguments à la collection : Add et Set. Vous pouvez utiliser Add pour ajouter des arguments en suivant leur ordre de déclaration. Sinon, vous pouvez utiliser Set pour définir un argument en fonction de sa position dans la liste d'arguments (où le premier argument est à la position 1).
Par exemple, si vous aviez un objet Java Foo prenant un constructeur de Foo (int, String, Object), vous pourriez utiliser un objet JMethodArgs comme indiqué dans l'extrait de code suivant :... Dim oArgs as Object set oArgs = oXJB.GetArgsContainer() oArgs.AddInt(CLng(12345)) oArgs.AddString("Pommes") oArgs.AddObject("java.lang.Object", oSomeJObjectProxy) Dim clsFoo as Object Dim oFoo as Object set clsFoo = oXJB.FindClass("com.mypackage.foo") set oFoo = oXJB.NewInstance(clsFoo, oArgs) ' Pour réutiliser l'objet oArgs, supprimez-le et utilisez la méthode Add ' de nouveau, ou bien, utilisez la méthode Set pour réinitialiser les paramètres ' Dans le cadre de cet exemple, nous allons utiliser Set oArgs.SetInt(1, CLng(22222)) oArgs.SetString(2, "Bananes") oArgs.SetObject(3, "java.lang.Object", oSomeOtherJObjectProxy) Dim oFoo2 as Object set oFoo2 = oXJB.NewInstance(clsFoo, oArgs)
- Sous Java:
- AddObject (String strObjectTypeName, Object oArg) Ajoute un objet arbitraire au conteneur d'argument à la première position suivante disponible ce qui incorpore l'objet dans le nom de classe spécifié par le premier paramètre. Les tableaux sont spécifiés avec la syntaxe [] traditionnelle ; par exemple :
AddObject("java.lang.Object[][]", oMy2DArrayOfFooObjects)
orAddObject("int[]", oMyArrayOfInts)
- AddByte (Byte byteArg)
Ajoute une valeur d'octet primitive au conteneur d'argument à la première position disponible.
- AddBoolean (Boolean bArg)
Ajoute une valeur booléenne primitive au conteneur d'argument à la première position disponible.
- AddShort (Integer iArg)
Ajoute une valeur courte primitive au conteneur d'argument à la première position disponible.
- AddInt (Long lArg)
Ajoute une valeur d'entier primitive au conteneur d'argument à la première position disponible.
- AddLong (Currency cyArg)
Ajoute une valeur longue primitive au conteneur d'argument à la première position disponible.
- AddFloat (Single fArg)
Ajoute une valeur de variable flottante primitive au conteneur d'argument à la première position disponible.
- AddDouble (Double dArg)
Ajoute une valeur double primitive au conteneur d'argument à la première position disponible.
- AddChar (String strArg)
Ajoute une valeur de caractère primitive au conteneur d'argument à la première position disponible.
- AddString (String strArg)
Ajoute l'argument sous forme de chaîne dans le conteneur d'arguments situé dans la première position disponible.
- SetObject (Integer iArgPosition, String strObjectTypeName, Object oArg) Ajoute un objet arbitraire au conteneur d'argument à la première position suivante disponible ce qui incorpore l'objet dans le nom de classe spécifié par le premier paramètre. Les tableaux sont spécifiés avec la syntaxe [] traditionnelle ; par exemple :
SetObject(1, "java.lang.Object[][]", oMy2DArrayOfFooObjects)
orSetObject(2, "int[]", MyArrayOfInts)
- SetByte (Integer iArgPosition, Byte byteArg)
Définit une valeur d'octet primitive pour le conteneur d'argument à la première position disponible.
- SetBoolean (Integer iArgPosition, Boolean bArg)
Définit une valeur booléenne primitive pour le conteneur d'argument à la première position disponible.
- SetShort (Integer iArgPosition, Integer iArg)
Définit une valeur courte primitive pour le conteneur d'argument à la première position disponible.
- SetInt (Integer iArgPosition, Long lArg)
Définit une valeur d'entier primitive pour le conteneur d'argument à la première position disponible.
- SetLong (Integer iArgPosition, Currency cyArg)
Définit une valeur d'entier primitive pour le conteneur d'argument à la première position disponible.
- SetFloat (Integer iArgPosition, Single fArg)
Définit une valeur de variable flottante primitive pour le conteneur d'argument à la première position disponible.
- SetDouble (Integer iArgPosition, Double dArg)
Définit une valeur double primitive pour le conteneur d'argument à la première position disponible.
- SetChar (Integer iArgPosition, String strArg)
Définit une valeur de caractère primitive pour le conteneur d'argument à la première position disponible.
- SetString (Integer iArgPosition, String strArg)
Définit une valeur java.lang.String Java pour le conteneur d'argument à la première position disponible.
- Object Item(Integer iArgPosition)
Renvoie la valeur d'un argument à une position spécifique.
- Clear()
Supprime tous les arguments du conteneur et rétablit la valeur 1 dans la première position disponible.
- Long Count()
Renvoie le nombre d'arguments du conteneur.