ActiveX 客户机编程,JClassProxy 和 JObjectProxy 类
使用 JClassProxy 和 JObjectProxy 对象处理访问 Java™ 类和对象的大多数任务。
JClassFactory 是用来访问大部分 Java 虚拟机 (JVM) 功能的对象。此对象处理 JVM 初始化、访问类以及创建类实例(对象)。使用 JClassProxy 和 JObjectProxy 对象访问大多数 Java 类和对象:
- XJBInit(String astrJavaParameterArray())
使用表示命令行参数的字符串数组来初始化 JVM 环境,您通常将这些参数发送到 java.exe 文件。
如果在 XJBInit() 字符串数组中有无效参数,那么会显示以下错误:错误:调用 XJBInit() 时发生 0x6002“XJBJNI::Init() 未能创建 VM”
如果启用了 C++ 记录,那么活动日志将显示那些无效参数。 - JClassProxy FindClass(String strClassName)
使用当前线程类装入器,装入指定的全限定类名,以及返回表示 Java 类对象的 JClassProxy 对象。
- JObjectProxy NewInstance() 使用提供的参数为指定的 JClassProxy 对象创建 Class 实例,以调用 Class 构造函数。关于使用 JMethodArgs 方法的更多信息,请参阅 ActiveX to EJB 网桥,调用 Java 方法。
JObjectProxy NewInstance(JClassFactory obj, Variant vArg1, Variant vArg2, Variant vArg3, ...) JObjectProxy NewInstance(JClassFactory obj, JMethodArgs args)
- JMethodArgs GetArgsContainer()
返回 JMethodArgs 对象 (Class instance)。
您可以从正常返回 Java 类对象的JClassFactory.FindClass() 方法和任意 Java 方法调用中创建 JClassProxy 对象。如果您具有直接访问 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
您可以从 JClassFactory.NewInstance() 方法中创建 JObjectProxy,或者从正常返回类实例对象的 Java 方法中创建。如果您具有直接访问 Java 类对象的权利,那么您可以使用此对象,而且可以访问对象的所有静态方法和字段。 对象实例的所有方法和字段都是可访问的(包含可访问通过继承得来的方法和字段)。
JMethodArgs 对象是从 JClassFactory.GetArgsContainer() 方法创建的。此对象可作为方法和构造函数自变量的容器使用。在调用方法时重设对象类型(例如,将 java.lang.String JProxyObject 类型发送到通常为 java.lang.Object 类型的构造函数时)就必须使用此对象。
您可以使用两组方法将自变量添加到集合:Add 和 Set。您可使用 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)
orAddObject(“int[]”, oMyArrayOfInts)
- AddByte (Byte byteArg)
将基本字节值添加到下一个可用位置中的自变量容器。
- AddBoolean (Boolean bArg)
将基本布尔值添加到下一个可用位置中的自变量容器。
- AddShort (Integer iArg)
将基本短型值添加到下一个可用位置中的自变量容器。
- AddInt (Long lArg)
将基本整型值添加到下一个可用位置中的自变量容器。
- AddLong (Currency cyArg)
将基本长型值添加到下一个可用位置中的自变量容器。
- AddFloat (Single fArg)
将基本浮点值添加到下一个可用位置中的自变量容器。
- AddDouble (Double dArg)
将基本双精度值添加到下一个可用位置中的自变量容器。
- AddChar (String strArg)
将基本字符值添加到下一个可用位置中的自变量容器。
- AddString (String strArg)
将字符串表单中的自变量添加到下一个可用位置中的自变量容器。
- SetObject (Integer iArgPosition, String strObjectTypeName, Object oArg) 将任意对象添加到自变量容器中指定位置,并将它类型转换成第二个参数中指定的类名称或基本类型名称。数组是使用传统的 [] 语法指定的;例如:
SetObject(1, “java.lang.Object[][]”, oMy2DArrayOfFooObjects)
orSetObject(2, “int[]”, MyArrayOfInts)
- SetByte (Integer iArgPosition, Byte byteArg)
将基本字节值设置到自变量容器中指定位置。
- SetBoolean (Integer iArgPosition, Boolean bArg)
将基本布尔值设置到自变量容器中指定位置。
- SetShort (Integer iArgPosition, Integer iArg)
将基本短型值设置到自变量容器中指定位置。
- SetInt (Integer iArgPosition, Long lArg)
将基本整型值设置到自变量容器中指定位置。
- SetLong (Integer iArgPosition, Currency cyArg)
将基本长型值设置到自变量容器中指定位置。
- SetFloat (Integer iArgPosition, Single fArg)
将基本浮点值设置到自变量容器中指定位置。
- SetDouble (Integer iArgPosition, Double dArg)
将基本双精度值设置到自变量容器中指定位置。
- SetChar (Integer iArgPosition, String strArg)
将基本字符值设置到自变量容器中指定位置。
- SetString (Integer iArgPosition, String strArg)
将 java.lang.String 值设置到自变量容器中指定位置。
- Object Item(Integer iArgPosition)
返回特定自变量位置上的自变量值。
- Clear()
从容器中除去所有自变量,并复位下一个可用位置。
- Long Count()
返回容器中的自变量数。