ActiveX クライアント・プログラミング: JClassProxy および JObjectProxy クラス
Java™ クラスおよびオブジェクトにアクセスするタスクの大部分は、 JClassProxy および JObjectProxy オブジェクトによって処理されます。
JClassFactory は、Java 仮想マシン (JVM) の大部分の機能にアクセスするために使用されるオブジェクトです。 このオブジェクトは、JVM の初期化、クラスへのアクセス、 およびクラス・インスタンス (オブジェクト) の作成を処理します。 JClassProxy および JObjectProxy オブジェクトを使用して Java クラスおよびオブジェクトの大半にアクセスします。
- XJBInit(String astrJavaParameterArray())
通常 java.exe ファイルに送信するコマンド行パラメーターを表すストリングの配列を使用して、 JVM 環境を初期化します。
XJBInit() ストリング配列の中に無効なパラメーターがあると、 次のエラーが表示されます。Error: 0x6002 "XJBJNI::Init() Failed to create VM" when calling XJBInit()
C++ ロギングが使用可能になっていれば、 アクティビティー・ログが無効なパラメーターを表示します。 - JClassProxy FindClass(String strClassName)
現行スレッドのクラス・ローダーを使用して、指定された完全修飾クラス名をロードし、Java クラス・オブジェクトを表す JClassProxy オブジェクトを戻します。
- JObjectProxy NewInstance() クラス・コンストラクターを呼び出すために提供されているパラメーターを使用して、 指定された JClassProxy オブジェクトのクラス・インスタンスを作成します。 JMethodArgs メソッドの使用についての詳細は、 『ActiveX to EJB ブリッジによる Java メソッドの呼び出し』を参照してください。
JObjectProxy NewInstance(JClassFactory obj, Variant vArg1, Variant vArg2, Variant vArg3, ...) JObjectProxy NewInstance(JClassFactory obj, JMethodArgs args)
- JMethodArgs GetArgsContainer()
JMethodArgs オブジェクト (クラス・インスタンス) を戻します。
JClassProxy オブジェクトは、JClassFactory.FindClass() メソッドから作成できますが、 通常 Java クラス・オブジェクトを戻す任意の Java メソッド呼び出しからの作成も可能です。 ユーザーは、Java クラス・オブジェクトへの直接アクセス権を持っているかのように、 このオブジェクトを使用できます。 クラスの静的メソッドおよびフィールドはすべて、java.lang.Class メソッドとしてアクセス可能です。 反映されたユーザー・クラスの静的メソッド名と java.lang.Class (例えば、getName()) の静的メソッド名が競合する場合には、 反映された静的メソッドが最初に実行されます。
例として、getName() という名前の静的メソッドを以下に示します。 java.lang.Class オブジェクトも、getName() という名前のメソッドを持っています。- Java の場合:
class foo{ foo(){}; public static String getName(){return "abcdef";} public static String getName2(){return "ghijkl";} public String toString2(){return "xyz";} }
- Visual Basic の場合:
... Dim clsFoo as Object set clsFoo = oXJB.FindClass("foo") clsFoo.getName() ' Returns "abcdef" from the static foo class clsFoo.getName2() ' Returns "ghijkl" from the static foo class clsFoo.toString() ' Returns "class foo" from the java.lang.Class object. oFoo = oXJB.NewInstance(clsFoo) oFoo.toString() ' Returns some text from the java.lang.Object's ' toString() method which foo inherits from. oFoo.toString2() ' Returns "xyz" from the foo class instance
JObjectProxy オブジェクトは、 JClassFactory.NewInstance() メソッドから作成できますが、 通常、クラス・インスタンス・オブジェクトを戻す、任意の Java メソッド呼び出しからの作成も可能です。 ユーザーは、Java オブジェクトへの直接アクセス権を持っているかのようにこのオブジェクトを使用でき、 オブジェクトのすべての静的メソッドとフィールドにアクセスできます。 オブジェクトのインスタンス・メソッドとフィールドはすべて、 アクセス可能です (継承によってアクセス可能なものも含めて)。
JMethodArgs オブジェクトは、JClassFactory.GetArgsContainer() メソッドから作成されます。 このオブジェクトを、メソッドおよびコンストラクター引数のコンテナーとして使用します。 メソッドの呼び出し時に、オブジェクト・タイプをオーバーライドする場合 (例えば、 通常は java.lang.Object タイプを取るコンストラクターに java.lang.String JProxyObject タイプを送信する場合) は、 このオブジェクトを使用しなければなりません。
コレクションに引数を追加するメソッドには、 Add と Set の 2 つのグループを使用できます。 Add は、宣言される順序で引数を追加する場合に使用できます。 あるいは、Set を使用して、引数リスト内の位置に基づいて (この場合、 最初の引数は、位置 1 にあります) 引数を設定することができます。
例えば、Foo のコンストラクター (int、String、Object) を取る Java オブジェクト Foo を持っている場合は、 以下のコードの抜粋に示されるように JMethodArgs オブジェクトを使用できます。... 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) ' To reuse the oArgs object, just clear it and use the add method ' again, or alternatively, use the Set method to reset the parameters ' Here, we will use Set 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)
- Java の場合:
- AddObject (String strObjectTypeName, Object oArg) 次に使用可能になる位置で、 任意のオブジェクトを引数コンテナーに追加し、そのオブジェクトを、 最初のパラメーターで指定されたクラス名にキャストします。 配列は、従来からの [] 構文を使用して指定されます。 例えば、以下のようにします。
AddObject("java.lang.Object[][]", oMy2DArrayOfFooObjects)
またはAddObject("int[]", oMyArrayOfInts)
- AddByte (Byte byteArg)
次に使用可能になる位置で、プリミティブ byte 値を引数コンテナーに追加します。
- AddBoolean (Boolean bArg)
次に使用可能になる位置で、プリミティブ boolean 値を引数コンテナーに追加します。
- AddShort (Integer iArg)
次に使用可能になる位置で、プリミティブ short 値を引数コンテナーに追加します。
- AddInt (Long lArg)
次に使用可能になる位置で、プリミティブ int 値を引数コンテナーに追加します。
- AddLong (Currency cyArg)
次に使用可能になる位置で、プリミティブ long 値を引数コンテナーに追加します。
- AddFloat (Single fArg)
次に使用可能になる位置で、プリミティブ float 値を引数コンテナーに追加します。
- AddDouble (Double dArg)
次に使用可能になる位置で、プリミティブ double 値を引数コンテナーに追加します。
- AddChar (String strArg)
次に使用可能になる位置で、プリミティブ char 値を引数コンテナーに追加します。
- AddString (String strArg)
次に使用可能になる位置で、 ストリング・フォーム内の引数を引数コンテナーに追加します。
- SetObject (Integer iArgPosition, String strObjectTypeName, Object oArg) 指定された位置で、 任意のオブジェクトを引数コンテナーに追加し、そのオブジェクトを、 2 番目のパラメーターで指定されたクラス名またはプリミティブ・タイプ名にキャストします。 配列は、従来からの [] 構文を使用して指定されます。 例えば、以下のようにします。
SetObject(1, "java.lang.Object[][]", oMy2DArrayOfFooObjects)
またはSetObject(2, "int[]", MyArrayOfInts)
- SetByte (Integer iArgPosition, Byte byteArg)
指定された位置で、プリミティブ byte 値を引数コンテナーに設定します。
- SetBoolean (Integer iArgPosition, Boolean bArg)
指定された位置で、プリミティブ boolean 値を引数コンテナーに設定します。
- SetShort (Integer iArgPosition, Integer iArg)
指定された位置で、プリミティブ short 値を引数コンテナーに設定します。
- SetInt (Integer iArgPosition, Long lArg)
指定された位置で、プリミティブ int 値を引数コンテナーに設定します。
- SetLong (Integer iArgPosition, Currency cyArg)
指定された位置で、プリミティブ long 値を引数コンテナーに設定します。
- SetFloat (Integer iArgPosition, Single fArg)
指定された位置で、プリミティブ float 値を引数コンテナーに設定します。
- SetDouble (Integer iArgPosition, Double dArg)
指定された位置で、プリミティブ double 値を引数コンテナーに設定します。
- SetChar (Integer iArgPosition, String strArg)
指定された位置で、プリミティブ char 値を引数コンテナーに設定します。
- SetString (Integer iArgPosition, String strArg)
指定された位置で、java.lang.String 値を引数コンテナーに設定します。
- Object Item(Integer iArgPosition)
特定の引数位置で、引数の値を戻します。
- Clear()
コンテナーからすべての引数を除去し、 次に使用可能になる位置を 1 にリセットします。
- Long Count()
コンテナー内の引数の数を戻します。