开发 ActiveX 客户机应用程序代码

开发 ActiveX Windows 程序 (例如 Visual Basic , VBScript 和 Active Server Pages) ,以使用 WebSphere® ActiveX 到 EJB 网桥来访问企业 Bean。

准备工作

重要信息: 本主题假定您熟悉 ActiveX 编程以及在 Windows 平台上进行开发。 有关 ActiveX 应用程序客户机和 ActiveX 到 EJB 网桥的编程概念的信息,请参阅“ActiveX 到 Enterprise JavaBeans™ (EJB) 网桥”主题和相关主题。

您应该考虑将 ActiveX 到 EJB 网桥中给定的信息作为适当的编程准则。

有关此任务

要使用 ActiveX 到 EJB 网桥来访问 Java™ 类,请开发 ActiveX 程序以完成以下步骤:

过程

  1. 创建 XJB.JClassFactory 对象的实例。
  2. 通过调用 XJB.JClassFactory 对象的 XJBInit() 方法在 ActiveX 程序进程中创建 Java 虚拟机 (JVM) 代码。
    ActiveX 程序已创建 XJB.JClassFactory 对象并调用 XJBInit() 方法后,初始化 JVM 代码以供使用。
  3. 通过使用 XJB.JClassFactory FindClass() 和 NewInstance() 方法为 Java 类创建代理对象。
    ActiveX 程序可使用代理对象来访问 Java 类、对象字段和方法。
  4. 使用 Java 方法调用语法对 Java 类调用方法,并根据需要访问 Java 字段。
  5. 如果不可能进行自动转换,请使用助手功能执行转换。 可以在下列数据类型之间进行转换:
    • Java Byte 和 Visual Basic Byte
    • Visual Basic Currency 类型和 Java 64 位
  6. 实现方法以处理从 Java 类返回的任何错误。 在 Visual Basic 或 VBScript 中,使用 Err.Number 和 Err.Description 字段来确定实际的 Java 错误。

示例

查看 System.out 消息: ActiveX 到 Enterprise JavaBeans (EJB) 网桥没有可用于查看 Java System.out 消息的控制台。 要在运行独立的客户机程序(如 Visual Basic)时查看这些消息,请将输出重定向到一个文件。

以下示例说明如何将输出重定向到文件:
launchClientXJB.bat MyProgram.exe > output.txt
  • 要在运行服务程序 (例如 Active Server Pages) 时查看 System.out 消息,请将 Java System.out OutputStream 对象覆盖为 FileOutputStream。 例如,在 VBScript 中:
    'Redirect system.out to a file
    ' Assume that oXJB is an initialized XJB.JClassFactory object
     Dim clsSystem
     Dim oOS
     Dim oPS
     Dim oArgs
    
    ' Get the System class
      Set clsSystem = oXJB.FindClass("java.lang.System")
    
    ' Create a FileOutputStream object
    ' Create a PrintStream object and assign to it our FileOutputStream
      Set oArgs = oXJB.GetArgsContainer  oArgs.AddObject "java.io.OutputStream", oOS
      Set oPS = oXJB.NewInstance(oXJB.FindClass("java.io.PrintStream"), oArgs)
    
    ' Set our System OutputStream to our file
      clsSystem.setOut oPS

使用帮助程序方法进行数据类型转换的 ActiveX 客户机应用程序。 通常,在 ActiveX (Visual Basic 和 VBScript) 与 Java 方法之间自动进行数据类型转换,如 ActiveX 中所述,将数据类型转换为 EJB 网桥。 但是,针对不可能进行自动转换的情况,提供了字节帮助程序功能和货币帮助程序功能。

  • 字节帮助器功能
    因为 Java Byte 数据类型有正负之分(-127 到 128)而 Visual Basic Byte 数据类型没有正负之分(0 到 255),因此将没有正负之分的 Byte 转换为 Visual Basic Byte,这与 Java 有正负之分的字节类似。 要进行此转换,您可以使用下列帮助器功能:
    Private Function GetIntFromJavaByte(Byte jByte) as Integer
    	     GetIntFromJavaByte = (CInt(jByte) + 128) Mod 256 - 128
    End Function
  • 货币帮助器功能
    Visual Basic 6.0 无法像 Java 方法一样正确处理 64 位整数 (作为长整型数据类型)。 因此,Visual Basic 使用货币类型,该数据是内在地 64 位数据类型。 使用货币类型的唯一副作用是在类型中插入了小数点。 要在 Visual Basic 中抽取和操纵 64 位长型值,使用与下列示例相似的代码。 有关此用于转换货币数据类型的技术的更多详细信息,请参阅 Microsoft 知识库上的 Q189862, HOWTO: 在 VBA 中执行 64 位算术
    
    ' Currency Helper Types
    Private Type MungeCurr
        Value As Currency
    End Type
    Private Type Munge2Long
        LoValue As Long
        HiValue As Long
    End Type
    
    ' Currency Helper Functions
    Private Function CurrToText(ByVal Value As Currency) As String
        Dim Temp As String, L As Long
        Temp = Format$(Value, "#.0000")
        L = Len(Temp)
        Temp = Left$(Temp, L - 5) & Right$(Temp, 4)
        Do While Len(Temp) > 1 And Left$(Temp, 1) = "0"
            Temp = Mid$(Temp, 2)
        Loop
        Do While Len(Temp) > 2 And Left$(Temp, 2) = "-0"
            Temp = "-" & Mid$(Temp, 3)
        Loop
        CurrToText = Temp
    End Function
    
    Private Function TextToCurr(ByVal Value As String) As Currency
        Dim L As Long, Negative As Boolean
        Value = Trim$(Value)
        If Left$(Value, 1) = "-" Then
            Negative = True
            Value = Mid$(Value, 2)
        End If
        L = Len(Value)
        If L < 4 Then
            TextToCurr = CCur(IIf(Negative, "-0.", "0.") & _
                              Right$("0000" & Value, 4))
        Else
            TextToCurr = CCur(IIf(Negative, "-", "") & _
                              Left$(Value, L - 4) & "." & Right$(Value, 4))
        End If
    End Function
    
    ' Java Long as Currency Usage Example
    Dim LC As MungeCurr
    Dim L2 As Munge2Long
    
    ' Assign a Currency Value (really a Java Long)
    ' to the MungeCurr type variable
    LC.Value = cyTestIn
    
    ' Coerce the value to the Munge2Long type variable
    LSet L2 = LC
    
    ' Perform some operation on the value, now that we
    ' have it available in two 32-bit chunks
    L2.LoValue = L2.LoValue + 1
    
    ' Coerce the Munge value back into a currency value
    LSet LC = L2
    cyTestIn = LC.Value

下一步做什么?

开发 ActiveX 客户机应用程序代码后,请部署并运行 ActiveX 应用程序。