ActiveX 클라이언트 프로그래밍, JClassProxy 및 JObjectProxy 클래스
Java™ 클래스 및 오브젝트 액세스를 위한 대부분의 태스크는 JClassProxy 및 JObjectProxy 오브젝트로 처리됩니다.
JClassFactory는 JVM(Java Virtual Machine) 기능의 대부분에 액세스하는 데 사용되는 오브젝트입니다. 이 오브젝트는 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.String JProxyObject 유형을 보통 java.lang.Object 유형을 사용하는 생성자로 보내는 경우).
두 그룹의 메소드를 사용하여 인수를 콜렉션, Add 및 Set에 추가할 수 있습니다. 선언된 순서로 Add를 사용하여 인수를 추가할 수 있습니다. 또는 Set을 사용하여 인수 목록(여기서 첫 번째 인수는 위치 1에 있음)의 위치를 기반으로 인수를 설정할 수 있습니다.
예를 들어, Foo의 생성자를 사용하는 Java 오브젝트 Foo(int, String, Object)가 있는 경우, 다음 코드 추출에서 표시된 대로 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)
기본 바이트 값을 사용 가능한 다음 위치의 인수 컨테이너에 추가합니다.
- AddBoolean (Boolean bArg)
기본 부울 값을 사용 가능한 다음 위치의 인수 컨테이너에 추가합니다.
- 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) 임의의 오브젝트를 지정된 위치의 인수 컨테이너에 추가하여, 오브젝트를 두 번째 매개변수에서 지정한 클래스 이름이나 기본 유형 이름으로 캐스트합니다. 기존 [] 구문을 사용하여 배열이 지정됩니다. 예를 들어 다음과 같습니다.
SetObject(1, "java.lang.Object[][]", oMy2DArrayOfFooObjects)
또는SetObject(2, "int[]", MyArrayOfInts)
- SetByte (Integer iArgPosition, Byte byteArg)
기본 바이트 값을 지정된 위치의 인수 컨테이너로 설정합니다.
- SetBoolean (Integer iArgPosition, Boolean bArg)
기본 부울 값을 지정된 위치의 인수 컨테이너로 설정합니다.
- 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()
컨테이너에서 모든 인수를 제거하고 사용 가능한 다음 위치를 재설정합니다.
- Long Count()
컨테이너에서 인수 수를 리턴합니다.