ORACLE JAPAN Server Release 6.1

 

  |  

  WebLogic Server ホーム   |     jCOM リファレンス   |   前へ   |   次へ   |   目次   |   索引   |   PDF 版

サポートされる COM データ型とそれらに相当する Java データ型

 

WebLogic jCOM は、すべての COM Automation 型をサポートしています。BEA は、新しい Java クラスを導入せずに COM 型にアクセスすることを方針としました。このため、COM Variant は Object(java.lang.Long など)にマップされ、配列を含む Variant は Java 配列にマップされます。たとえば、使用する必要がある com.bea.jcom.Variant クラスは見つかりません。

WebLogic jCOM は、Java コレクション型に Visual Basic Collection としてアクセスすることをサポートしています。

この章では、以下のことを説明します。

 


Java オブジェクトへの Visual Basic Collection としてのアクセス

Visual Basic には、Collection というクラスがあらかじめ用意されています。WebLogic jCOM は、java.util.Vector および java.util.List のインスタンスに VB Collection としてアクセスすることをサポートしています。

Visual BASIC コードの例

Private Sub Form_Load()
Dim c As Collection
Set c = GetObject("firstjvm:java.util.LinkedList")
c.Add "hello" ' List is now: "hello"
c.Add Now, , "hello" ' List is now: , "hello"
c.Add "Goodbye", , , "hello" ' List is now: now, "hello", "Goodbye" c.Add "Before", , 3 ' List is now: now, "hello", "Before", "Goodbye" c.Add "After", , , 4 ' List is now: now, "hello", "Before", "Goodbye", "After"
For Each e In c
MsgBox e
Next
c.Remove 2 ' List is now: now, "Before", "Goodbye", "After"
c.Remove "Goodbye" ' List is now: now, "Before", "After"
MsgBox c.Item(1)
MsgBox c.Count
End Sub

VB

java.util.Vector へのマップ

注意

Collection.Add(item)

aVector.addElement(item)


Collection.Add(item, , before)

aVector.insertElementAt(before - 1, item)

before が数字の場合。

Collection.Add(item, , before)

aVector.insertElementAt(aVector.indexOf(before), item)

before が数字でない場合。

Collection.Add(item, , , after)

aVector.insertElementAt(after, item)

after が数字でない場合。

Collection.Add(item, , , after)

aVector.insertElementAt(aVector.indexOf(after) + 1, item)

after が数字の場合。

Collection.Count

aVector.size()


Collection.Item(index)

aVector.elementAt(index - 1)

index は数字でなければならない。

Collection.Remove(index)

aVector.removeElementAt(index - 1)

index が数字の場合。

Collection.Remove(index)

aVector.removeElement(index)

index が数字でない場合。

aCollection 中の各 x

x は aVector.elements() 列挙内の各オブジェクトの値を取る。


VB

java.util.List へのマップ

注意

Collection.Add(item)

aList.target.add(item)


Collection.Add(item, , before)

aList.add(before - 1, item)

before が数字の場合。

Collection.Add(item, , before)

aList.add(aVector.indexOf(before), item)

before が数字でない場合。

Collection.Add(item, , , after)

aList.add(after, item)

after が数字でない場合。

Collection.Add(item, , , after)

aList.add(aVector.indexOf(after) + 1, item)

after が数字の場合。

Collection.Count

aList.size()


Collection.Item(index)

aList.get(index - 1)

index は数字でなければならない。

Collection.Remove(index)

aList.remove(index - 1)

index が数字の場合。

Collection.Remove(index)

aList.remove(index)

index が数字でない場合。

aCollection 中の各 x

x は aList.listIterator() イテレータ内の各オブジェクトの値を取る。


 


COM IDL 型の Java、VB、および VC++ へのマップ

次の表に、各 IDL 型と、Java、Visual BASIC、および Visual C++ からのその使い方を示します。

表7-1

IDL

Java

Visual BASIC

Visual C++

[in] VARIANT_BOOL

boolean

ByVal boolean

VARIANT_BOOL

[in, out] または [out] VARIANT_BOOL*

boolean[] 単一要素配列

boolean

VARIANT_BOOL*

[in] unsigned char

byte

ByVal byte

unsigned char

[in, out] または [out] unsigned char*

byte[] 単一要素配列

byte

unsigned char*

[in] double

double

ByVal Double

double

[in, out] または [out] double*

double[] 単一要素配列

double

double*

[in] float

float

ByVal Single

float

[in, out] または [out] float*

float[] 単一要素配列

Single

float*

[in] long

int IDL long は 32 ビット

ByVal Long>

long>

[in, out] または [out] long*

int[] 単一要素配列

Long>

long*

[in] short

short

ByVal Integer>

short>

[in, out] または [out] short*

short[] 単一要素配列

Integer

short*

[in] BSTR

java.lang.String

ByVal Single

BSTR

[in, out] または [out] BSTR*

java.lang.String[] 単一要素配列

String

BSTR*

[in] CY

long CY は固定小数点、64 ビット

ByVal Currency

CURRENCY

[in, out] または [out] CY*

long[] 単一要素配列

Currency

CURRENCY*

[in] DATE

java.util.Date

ByVal Date

DATE

[in, out] または [out] DATE*

java.util.Date[]

Date

DATE*

[in] IDispatch*

java.lang.Object

ByVal Object

IDispatch*

[in, out] または [out] IDispatch**

java.lang.Object[] 単一要素配列

Object

IDispatch**

[in] ISomeInterface*

ISomeInterface 生成される Java インタフェース

ByVal ISomeInterface

ISomeInterface*

[in, out] または [out] ISomeInterface**

ISomeInterface[] 単一要素配列

ISomeInterface

ISomeInterface**

[in] SomeClass*

SomeClass 生成される Java クラス

ByVal SomeClass

SomeClass*

[in, out] または [out] SomeClass**

SomeClass[] 単一要素配列

SomeClass

SomeClass**

[in] IUnknown*

java.lang.Object

特定のクラス/インタフェース

IUnknown*

[in] Variant

java.lang.Object

ByVal Variant

VARIANT

[in, out] または [out] Variant*

java.lang.Object[] 単一要素配列

Variant

VARIANT*

[in] SAFEARRAY(unsigned char)

byte[]

VB ではサポートされない

SAFEARRAY*

[in, out] または [out] SAFEARRAY(unsigned char)*

byte[][]

VB ではサポートされない

SAFEARRAY**

[in] SAFEARRAY(VARIANT_BOOL)

boolean[]

VB ではサポートされない

SAFEARRAY*

[in, out] または [out] SAFEARRAY(VARIANT_BOOL)*

boolean[][]

VB ではサポートされない

SAFEARRAY**

[in] SAFEARRAY(short)

short[]

VB ではサポートされない

SAFEARRAY*

[in, out] または [out] SAFEARRAY(short)*

short[][]

VB ではサポートされない

SAFEARRAY**

[in] SAFEARRAY(long)

int[]

VB ではサポートされない

SAFEARRAY*

[in, out] または [out] SAFEARRAY(long)*

int[][]

VB ではサポートされない

SAFEARRAY**

[in] SAFEARRAY(float)

float[]

VB ではサポートされない

SAFEARRAY*

[in, out] または [out] SAFEARRAY(float)*

float[][]

VB ではサポートされない

SAFEARRAY**

[in] SAFEARRAY(double)

double[]

VB ではサポートされない

SAFEARRAY*

[in, out] または [out] SAFEARRAY(double)*

double[][]

VB ではサポートされない

SAFEARRAY**

[in] SAFEARRAY(CURRENCY)

long[]

VB ではサポートされない

SAFEARRAY*

[in, out] または [out] SAFEARRAY(CURRENCY)*

long[][]

VB ではサポートされない

SAFEARRAY**

[in] SAFEARRAY(DATE)

java.util.Date[]

VB ではサポートされない

SAFEARRAY*

[in, out] または [out] SAFEARRAY(DATE)*

java.util.Date[][]

VB ではサポートされない

SAFEARRAY**

[in] SAFEARRAY(BSTR)

String[]

VB ではサポートされない

SAFEARRAY*

[in, out] または [out] SAFEARRAY(BSTR)*

String[][]

VB ではサポートされない

SAFEARRAY**

[in] SAFEARRAY(LPDISPATCH)

Object[]

VB ではサポートされない

SAFEARRAY*

[in, out] または [out] SAFEARRAY(LPDISPATCH)*

Object[][]

VB ではサポートされない

SAFEARRAY**

[in] SAFEARRAY(VARIANT)

Object

VB ではサポートされない

SAFEARRAY*

[in, out] または [out] SAFEARRAY(VARIANT)*

Object[][]

VB ではサポートされない

SAFEARRAY**

[in] SAFEARRAY(LPUNKNOWN)

Object

VB ではサポートされない

SAFEARRAY*

[in, out] または [out] SAFEARRAY(LPUNKNOWN)*

Object[][]

VB ではサポートされない

SAFEARRAY**

 


異なる型を含む COM Variant の Java へのマップ

次の表に、Variant と Java 型のマップを示します。

以下を含む Variant

Java 型へのマップ

VARIANT_BOOL

java.lang.Boolean

VARIANT_BOOL*

java.lang.Boolean[] 単一要素配列

unsigned char

java.lang.Byte

unsigned char*

java.lang.Byte[] 単一要素配列

double

java.lang.Double

double*

java.lang.Double[] 単一要素配列

float

java.lang.Float

float*

java.lang.Float[] 単一要素配列

long

java.lang.Integer IDL long は 32 ビット

long*

java.lang.Integer[] 単一要素配列

short

java.lang.Short

short*

java.lang.Short[] 単一要素配列

BSTR

java.lang.String

BSTR*

java.lang.String[] 単一要素配列

CY

java.lang.Long

CY*

java.lang.Long[] 単一要素配列

Decimal

java.math.BigDecimal

Decimal*

java.math.BigDecimal[] 単一要素配列

DATE

java.util.Date

DATE*

java.util.Date[]

SCODE

java.lang.Long

SCODE*

java.lang.Long[] 単一要素配列

IDispatch*

java.lang.Object

IUnknown*

java.lang.Object

VARIANT_BOOL の単一次元配列

boolean[]

unsigned char の 1 次元配列

byte[]

double の 1 次元配列

double[]

float の 1 次元配列

float[]

long の 1 次元配列

int[] IDL long は 32 ビット</TD

short の 1 次元配列

short[]

BSTR の 1 次元配列

java.lang.String[]

CY の 1 次元配列

long[]

DATE の 1 次元配列

java.util.Date[]

SCODE の 1 次元配列

long[]

IDispatch* の 1 次元配列

java.lang.Object[]

IUnknown* の 1 次元配列

java.lang.Object[]

Variant の 1 次元配列

java.lang.Object[]

Variant の 2 次元配列

java.lang.Object[][]


 

com.bea.jcom.EmptyVariant.TYPE と com.bea.jcom.NullVariant.TYPE を受け渡すことで、VT_EMPTY または VT_NULL 型の Variant を受け渡すことができます。

 


COM から Java へのレイトバインド アクセス中に使用される型変換

以下の表に、左欄の VB 型の VB 値「vb」を上欄の Java 型に変換するために使用される Java 式を示します。* が付けられた変換は、Type Mismatch Error を生成する場合があります。

Java boolean、byte、short、および int

Java(右)
VB(下)

boolean

byte

short

int

Boolean

自然

vb ? 1 : 0

vb ? 1 : 0

vb ? 1 : 0

Byte(0..255)

vb != 0

new Integer(vb).byteValue()

new Integer(vb).shortValue()

new Integer(vb).intValue()

Integer(16 ビット)

vb != 0

new Short(vb).byteValue()

自然

new Short(vb).intValue()

Long(32 ビット)

vb != 0

new Integer(vb).byteValue()

new Integer(vb).shortValue()

自然

Single

vb != 0.0F

new Float(vb).byteValue()

new Float(vb).shortValue()

new Float(vb).intValue()

Double

vb != 0.0

new Double(vb).byteValue()

new Double(vb).shortValue()

new Double(vb).intValue()

Currency(64 ビット)

vb != 0

new Long(vb).byteValue()

new Long(vb).shortValue()

new Long(vb).intValue()

String

new Boolean(vb).booleanValue()

new Long(vb).byteValue()

new Long(vb).shortValue()

new Long(vb).intValue()*

Date

型不一致エラー

型不一致エラー

型不一致エラー

型不一致エラー

Object

型不一致エラー

型不一致エラー

型不一致エラー

型不一致エラー

Variants

内容に応じて上記のとおり




Java long、char、float、および double

VB/Java

long

char

float

double

Boolean

vb ? 1 : 0

vb ?(char)1 :(char)0

vb ?1.0F :0.0F

vb ? 1.0 : 0.0

Byte(0..255)

new Integer(vb).longValue()

(char)(new Integer(vb).intValue())

new Integer(vb).floatValue()

new Integer(vb).doubleValue()

Integer(16 ビット)

new Short(vb).longValue()

(char)(new Short(vb).intValue())

new Short(vb).floatValue()

new Short(vb).doubleValue()

Long (32 bit)

new Integer(vb).longValue()

(char)(new Integer(vb).byteValue())

new Integer(vb).floatValue()

new Integer(vb).doubleValue()

Single

new Float(vb).longValue()

(char)(new Float(vb).intValue())

自然

new Float(vb).doubleValue()

Double

new Double(vb).longValue()

(char)(new Double(vb).intValue())

new Double(vb).floatValue()

自然

Currency(64 ビット)

自然

(char)(new Long(vb).intValue())

new Long(vb).floatValue()

new Long(vb).doubleValue()

String

new Long(vb).longValue()

(char)(new Long(vb).intValue())

new Long(vb).floatValue()

new Long(vb).doubleValue()

Date

型不一致エラー

型不一致エラー

型不一致エラー

型不一致エラー

Object

エラー

エラー

エラー

エラー

Variants

内容に応じて上記のとおり




Java String、Date、および Object

VB/Java

String

Date

Object

Boolean

vb + ""

エラー

new Boolean(vb)

Byte(0..255)

vb + ""

エラー

new Byte(vb)

Integer
(16 ビット)

vb + ""

エラー

new Short(vb)

Long
(32 bit)

vb + ""

エラー

new Integer(vb)

Single

vb + ""

エラー

new Float(vb)

Double

vb + ""

エラー

new Double(vb)

Currency

vb + ""

エラー

new Long(vb)

String

自然

new Date(vb)

vb (as String_

Date

vb.toString()

自然

vb (as Date)

Object

vb.toString

エラー

vb

Variant

内容に応じて上記のとおり



配列

Java メソッドが配列のパラメータを持つ場合、そのメソッドに VB パラメータを値で渡すときにエラーが生成されます。値を参照で渡し、型が正確に一致する場合(下表を参照)、Java メソッドは単一要素配列を受け取ります。この単一要素を修正して、対応する VB パラメータを変更できます。配列を渡し、配列の内容の型が正確に一致する場合、Java メソッドは配列を受け取ります。この配列の要素を修正して対応する VB パラメータを変更できます。

Java 型

参照渡しの VB の一致

boolean[]

参照によって渡される Boolean

byte[]

参照によって渡される Byte

short[]

参照によって渡される Short

int[]

参照によって渡される Long

long[]

参照によって渡される Currency

float[]

参照によって渡される Single

double[]

参照によって渡される Double

String[]

参照によって渡される String

java.util.Date[]

参照によって渡される Date


 

配列

Java 型

一致する VB 型のパラメータ

boolean[]

Dim anArray(n) as Boolean

byte[]

Dim anArray(n) as Byte

short[]

Dim anArray(n) as Short

int[]

Dim anArray(n) as Long

long[]

Dim anArray(n) as Currency

float[]

Dim anArray(n) as Single

double[]

Dim anArray(n) as Double

String[]

Dim anArray(n) as String

java.util.Date[]

Dim anArray(n) as Date

Object[]

Dim anArray(n) as String

Object[]

Dim anArray(n) as Date

Object[]

Dim anArray(n) as Object

Object[]

Dim anArray(n) as Variant


 

 


Java から COM VariantEnums へのアクセス

一部の COM メソッドは、COM VariantEnumeration 型を返します。WebLogic jCOM の java2com ツールは、返された型を標準 Java java.lang.Enumeration に自動的に変換します。しかし、完全な一致は存在しません。これは、COM Enumeration には 「hasMoreElements()」呼び出しに相当するものがないからです。このため、「NoSuchElementException」を取得するまで「nextElement」を繰り返す必要があります。

ここで、回避策があります。JCOM_PREFETCH_ENUMS Java プロパティを設定した場合、WebLogic jCOM は背後にある次の要素をプリフェッチします。このため、「hasMoreElements()」メソッドを適切に実行できます。

 

back to top previous page next page