Beispiel: ActiveX-Clientanwendung, die Java-Methoden aufruft
In der ActiveX-EJB-Brücke werden Methoden mit der von der jeweiligen Landessprache verwendeten Syntax für Methodenaufrufe aufgerufen.
- Im Gegensatz zu Java-Methoden unterstützt ActiveX keine Polymorphie für Methoden (und Konstruktoren), d. h., in einer Klasse können zwei Methoden nicht denselben Namen haben.
- Bei Java-Methoden muss die Groß-/Kleinschreibung beachtet werden, bei der ActiveX-Automation ist das nicht erforderlich.
Zum Kompensieren des polymorphen Verhaltens von Java müssen Sie die exakten Parametertypen an den Methodenaufruf übergeben. Die Parametertypen bestimmen die aufzurufende Methode. Eine Liste der richtigen Typen enthält der Abschnitt "ActiveX-EJB-Brücke, Datentypen konvertieren".
- Der folgende Visual Basic-Code schlägt beispielsweise fehl, wenn die Methode CLng() nicht vorhanden ist oder die toHexString-Syntax fälschlicherweise als ToHexString eingegeben wird:
... Dim strHexValue as String strHexValue = clsMyString.toHexString(CLng(255))
- In manchen Entwicklungsumgebungen kann es schwierig sein, die Groß-/Kleinschreibung der Methodenaufrufe unverändert zu übernehmen. Wenn Sie in Visual Basic beispielsweise eine Methode "close()" (Kleinbuchstaben) aufrufen möchten, setzt der Visual Basic-Code einen großen Anfangsbuchstaben im Methodennamen, d. h. "Close()". Dieses Problem kann in Visual Basic nur durch die Verwendung der Methode CallByName() umgangen werden. Beispiele:
o.Close(123) 'Falsch... CallByName(o, "close", vbMethod, 123) 'Richtig...
Oder verwenden Sie die Eval-Funktion in VBScript:o.Close(123) 'Falsch... Eval("o.Close(123)") 'Richtig...
- Der Rückgabewert einer Funktion wird dynamisch immer in den richtigen Typ konvertiert. Sie müssen jedoch darauf achten, in Visual Basic das Schlüsselwort set zu verwenden. Wenn Sie einen Rückgabewert mit einem nicht primitiven Datentyp erwarten, müssen Sie set verwenden. Wenn Sie die Rückgabe eines primitiven Datentyps erwarten, ist die Verwendung von set nicht erforderlich. Schauen Sie sich dazu das folgende Beispiel an:
Set oMyObject = o.getObject iMyInt = o.getInt
Manchmal ist Ihnen der Objekttyp, der von einem Methodenaufruf zurückgegeben wird, möglicherweise nicht bekannt, weil die wrapper-Klassen automatisch in primitive Datentypen konvertiert werden (z. B. gibt java.lang.Integer einen ActiveX-Automationstyp "Long" zurück). In diesen Fällen müssen Sie möglicherweise die in Ihrer Programmiersprache integrierten Verfahren für die Bearbeitung von Ausnahmen verwenden, um zu versuchen, den Rückgabetyp zu erzwingen (z. B. On Error oder Err.Number in Visual Basic).
- Methoden mit Zeichenparametern
Da ActiveX Automation die von den Java-Methoden unterstützten Zeichentypen eigentlich nicht unterstützt, verwendet die ActiveX-EJB-Brücke Zeichenfolgen (Strings; byte und VT_I1 funktionieren nicht, weil Zeichen in Java-Code mehrere Bytes haben). Wenn Sie versuchen, eine Methode aufzurufen, die den Typ char oder java.lang.Character verwendet, müssen Sie den Container für JMethodArgs-Parameter verwenden, um Zeichenwerte an Methoden oder Konstruktoren zu übergeben. Weitere Informationen zur Verwendung dieses Parametercontainers enthält der Abschnitt "Methoden, die den Typ "Object" als Argument verwenden, und abstrakte Argumente".
- Methoden, die den Typ "Object" als Argument
verwenden, und abstrakte Argumente
Aufgrund der polymorphen Beschaffenheit der Java-Programmierung verwendet die ActiveX-Java-Brücke zur Ermittlung einer Methode die direkte Zuordnung von Parametertypen. Dieses Verfahren eignet sich in den meisten Fällen, aber manchmal werden Methoden mit einer übergeordneten (Parent) oder abstrakten (Abstract) Klasse als Argumenttyp deklariert (z. B. java.lang.Object). Sie müssen die Möglichkeit haben, ein Objekt eines beliebigen Typs an eine Methode zu senden. Dazu müssen Sie mit dem Objekt XJB.JMethodArgs die Übereinstimmung Ihrer Parameter mit den Parametern in Ihrer Methode erzwingen. Sie können eine JMethodArgs-Instanz über die Methode JClassFactory.GetArgsContainer() abrufen.
Das Objekt JMethodArgs ist ein Container für Methodenparameter oder -argumente. Sie können diesem Container nacheinander Parameter hinzufügen und anschließend das Objekt JMethodArgs an Ihren Methodenaufruf senden. Die Objekte JClassProxy und JObjectProxy erkennen das Objekt JMethodArgs und versuchen, die richtige Methode zu ermitteln. Außerdem bewirken die Objekte, dass Java Ihre Parameter in entsprechender Weise erzwingt.
Wenn Sie z. B. einem Hash-Tabellenobjekt ein Element hinzufügen möchten, ist die Methodensyntax Objekt put(Objektschlüssel, Objektwert). In Visual Basic muss die Methode wie folgt verwendet werden:Dim oMyHashtable as Object Set oMyHashtable = _ oXJB.NewInstance(oXJB.FindClass("java.utility.Hashtable")) ' Diese Zeile ist ungültig. Die ActiveX-EJB-Brücke kann keine Methode ' mit dem Namen "put" finden, die die Typen "short" und "String" als Parameter verwendet: oMyHashtable.put 100, "Dogs" oMyHashtable.put 200, "Cats" ' Stattdessen muss ein XJB.JMethodArgs-Objekt verwendet werden: Dim oMyHashtableArgs as Object Set oMyHashtableArgs = oXJB.GetArgsContainer oMyHashtableArgs.AddObject("java.lang.Object", 100) oMyHashtableArgs.AddObject("java.lang.Object", "Dogs") oMyHashtable.put oMyHashTableArgs ' Das JMethodArgs-Objekt kann wieder verwendet werden, wenn dessen Inhalt gelöscht wird. oMyHashtableArgs.Clear oMyHashtableArgs.AddObject("java.lang.Object", 200) oMyHashtableArgs.AddObject("java.lang.Object", "Cats") oMyHashtable.put oMyHashTableArgs