ActiveX-Client-Programmierung, Klassen "JClassProxy" und "JObjectProxy"
Die meisten Tasks für den Zugriff auf Ihre Java™-Klassen und -Objekte werden mit dem JClassProxy- und dem JObjectProxy-Objekt ausgeführt.
JClassFactory ist das Objekt, das für den Zugriff auf die meisten JVM-Funktionen verwendet wird. Dieses Objekt initialisiert die JVM, greift auf Klassen zu und erstellt Klasseninstanzen (Objekte). Mit den Objekten JClassProxy und JObjectProxy können Sie auf die meisten Java-Klassen und -Objekte zugreifen:
- XJBInit(String astrJavaParameterArray())
Initialisiert die JVM-Umgebung unter Verwendung eines Array von Strings, die die Befehlszeilenparameter darstellen, die Sie normalerweise an die Datei java.exe senden.
Falls das String-Array für die Methode "XJBInit()" ungültige Parameter enthält, wird der folgende Fehler angezeigt:Error: 0x6002 "XJBJNI::Init() Failed to create VM" when calling XJBInit()
Wenn die C++-Protokollierung aktiviert ist, zeigt das Aktivitätenprotokoll den ungültigen Parameter an. - JClassProxy FindClass(String strClassName)
Verwendet den aktuellen Threadklassenlader, um den vollständig qualifizierten Klassennamen zu laden, und gibt ein JClassProxy-Objekt zurück, das als Java-Klassenobjekt fungiert.
- JObjectProxy NewInstance() Erstellt eine Klasseninstanz für das angegebene JClassProxy-Objekt unter Verwendung der Parameter, die für den Aufruf des Klassenkonstruktors angegeben wurden. Nähere Informationen zur Verwendung der Methode "JMethodArgs" finden Sie im Abschnitt "ActiveX-EJB-Brücke, Java-Methoden aufrufen".
JObjectProxy NewInstance(JClassFactory obj, Variant vArg1, Variant vArg2, Variant vArg3, ...) JObjectProxy NewInstance(JClassFactory obj, JMethodArgs args)
- JMethodArgs GetArgsContainer()
Gibt ein JMethodArgs-Objekt (Klasseninstanz) zurück.
Sie können ein JClassProxy-Objekt mit der Methode "JClassFactory.FindClass()" und mit jedem Java-Methodenaufruf erstellen, der normalerweise ein Java-Klassenobjekt zurückgibt. Sie können dieses Objekt so verwenden, als hätten Sie direkten Zugriff auf das Java-Klassenobjekt. Auf alle statischen Methoden und Felder der Klasse kann in derselben Weise wie auf die java.lang.Class-Methoden zugegriffen werden. Tritt zwischen Namen von statischen Methoden einer bestimmten Benutzerklasse und den Methodennamen von java.lang.Class (z. B. getName()) ein Konflikt auf, werden die statischen Methoden zuerst ausgeführt.
Es folgt ein Beispiel für eine statische Methode mit dem Namen "getName()". Das java.lang.Class-Objekt hat ebenfalls eine Methode mit dem Namen getName():- In Java:
class foo{ foo(){}; public static String getName(){return "abcdef";} public static String getName2(){return "ghijkl";} public String toString2(){return "xyz";} }
- In Visual Basic:
... Dim clsFoo as Object set clsFoo = oXJB.FindClass("foo") clsFoo.getName() ' Gibt "abcdef" aus der statischen Klasse foo zurück. clsFoo.getName2() ' Gibt "ghijkl" aus der statischen Klasse foo zurück. clsFoo.toString() ' Gibt "class foo" aus dem java.lang.Class-Objekt zurück. oFoo = oXJB.NewInstance(clsFoo) oFoo.toString() ' Gibt Text aus der Methode toString() von java.lang.Object, ' von der foo Daten übernimmt, zurück. oFoo.toString2() ' Gibt "xyz" aus der foo-Klasseninstanz zurück.
Sie können ein JObjectProxy-Objekt mit der Methode "JClassFactory.NewInstance()" und mit jedem Java-Methodenaufruf erstellen, der das Objekt einer Klasseninstanz zurückgibt. Sie können dieses Objekt so verwenden, als hätten Sie direkten Zugriff auf das Java-Objekt, und können auf alle statischen Methoden und Felder des Objekts zugreifen. Auf alle Methoden und Felder der Objektinstanz kann zugegriffen werden (einschließlich derjenigen, die durch Vererbung übernommen wurden).
Das JMethodArgs-Objekt wird über die Methode "JClassFactory.GetArgsContainer()" erstellt. Verwenden Sie dieses Objekt als Container für Methoden- und Konstruktorparameter. Sie müssen dieses Objekt verwenden, wenn Sie den Objekttyp beim Aufrufen einer Methode überschreiben (z. B., wenn Sie ein JProxyObject des Typs java.lang.String an einen Konstruktor senden, der normalerweise den Typ java.lang.Object verwendet).
Es gibt zwei Methodengruppen, mit denen der Collection Argumente hinzugefügt werden können: Add und Set. Sie können Add verwenden, um Argumente in der Reihenfolge hinzuzufügen, in der sie deklariert werden. Sie haben auch die Möglichkeit, Set zu verwenden, um ein Argument nach seiner Position in der Argumentenliste zu definieren (das erste Argument ist an Position 1).
Wenn Sie ein Java-Objekt Foo haben, das den Konstruktor Foo (int, String, Object) verwendet, können Sie, wie im folgenden Codeauszug dargestellt, ein JMethodArgs-Objekt verwenden:... Dim oArgs as Object set oArgs = oXJB.GetArgsContainer() oArgs.AddInt(CLng(12345)) oArgs.AddString("Apples") 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) ' Wenn Sie das oArgs-Objekt wieder verwenden möchten, löschen Sie es, und verwenden Sie ' die Methode erneut, oder verwenden Sie die Setter-Methode, um die Parameter zurückzusetzen. ' Im vorliegenden Fall wird Set verwendet. oArgs.SetInt(1, CLng(22222)) oArgs.SetString(2, "Bananas") oArgs.SetObject(3, "java.lang.Object", oSomeOtherJObjectProxy) Dim oFoo2 as Object set oFoo2 = oXJB.NewInstance(clsFoo, oArgs)
- In Java:
- AddObject (String strObjectTypeName, Object oArg) Fügt dem Parametercontainer ein beliebiges Objekt an der nächsten verfügbaren Position hinzu und setzt das Objekt in den Klassennamen, der im ersten Parameter angegeben ist, um. Bereiche werden mit der herkömmlichen []-Syntax angegeben, z. B.:
AddObject("java.lang.Object[][]", oMy2DArrayOfFooObjects)
oderAddObject("int[]", oMyArrayOfInts)
- AddByte (Byte byteArg)
Fügt dem Parametercontainer den Basiselementwert "byte" an der nächsten verfügbaren Position hinzu.
- AddBoolean (Boolean bArg)
Fügt dem Parametercontainer den Basiselementwert "boolean" an der nächsten verfügbaren Position hinzu.
- AddShort (Integer iArg)
Fügt dem Parametercontainer den Basiselementwert "short" an der nächsten verfügbaren Position hinzu.
- AddInt (Long lArg)
Fügt dem Parametercontainer den Basiselementwert "int" an der nächsten verfügbaren Position hinzu.
- AddLong (Currency cyArg)
Fügt dem Parametercontainer den Basiselementwert "long" an der nächsten verfügbaren Position hinzu.
- AddFloat (Single fArg)
Fügt dem Parametercontainer den Basiselementwert "float" an der nächsten verfügbaren Position hinzu.
- AddDouble (Double dArg)
Fügt dem Parametercontainer den Basiselementwert "double" an der nächsten verfügbaren Position hinzu.
- AddChar (String strArg)
Fügt dem Parametercontainer den Basiselementwert "char" an der nächsten verfügbaren Position hinzu.
- AddString (String strArg)
Fügt dem Parametercontainer den Parameter in Form einer Zeichenfolge (string) an der nächsten verfügbaren Position hinzu.
- SetObject (Integer iArgPosition, String strObjectTypeName, Object oArg) Fügt dem Parametercontainer ein beliebiges Objekt an der angegebenen Position hinzu und setzt das Objekt in den Klassennamen bzw. den Namen des Basiselementtyps, der im zweiten Parameter angegeben ist, um. Bereiche werden mit der herkömmlichen []-Syntax angegeben, z. B.:
SetObject(1, "java.lang.Object[][]", oMy2DArrayOfFooObjects)
oderSetObject(2, "int[]", MyArrayOfInts)
- SetByte (Integer iArgPosition, Byte byteArg)
Definiert für den Parametercontainer den Basiselementwert "byte" an der angegebenen Position.
- SetBoolean (Integer iArgPosition, Boolean bArg)
Definiert für den Parametercontainer den Basiselementwert "boolean" an der angegebenen Position.
- SetShort (Integer iArgPosition, Integer iArg)
Definiert für den Parametercontainer den Basiselementwert "short" an der angegebenen Position.
- SetInt (Integer iArgPosition, Long lArg)
Definiert für den Parametercontainer den Basiselementwert "int" an der angegebenen Position.
- SetLong (Integer iArgPosition, Currency cyArg)
Definiert für den Parametercontainer den Basiselementwert "long" an der angegebenen Position.
- SetFloat (Integer iArgPosition, Single fArg)
Definiert für den Parametercontainer den Basiselementwert "float" an der angegebenen Position.
- SetDouble (Integer iArgPosition, Double dArg)
Definiert für den Parametercontainer den Basiselementwert "double" an der angegebenen Position.
- SetChar (Integer iArgPosition, String strArg)
Definiert für den Parametercontainer den Basiselementwert "char" an der angegebenen Position.
- SetString (Integer iArgPosition, String strArg)
Definiert für den Parametercontainer einen java.lang.String-Wert an der angegebenen Position.
- Object Item(Integer iArgPosition)
Gibt den Wert eines Parameters an einer spezifischen Parameterposition zurück.
- Clear()
Löscht alle Parameter aus dem Container und setzt die nächste verfügbare Position auf "eins" zurück.
- Long Count()
Gibt die Anzahl der Parameter im Container zurück.