ヘッダーをスキップ
Oracle COM Automation機能開発者ガイド
11gリリース1(11.1)
E05796-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

3 Oracle COM Automationの基本機能

この章では、Oracle COM Automationのプログラム・インタフェースについて説明します。

この章の項目は次のとおりです。

データ型の変換

Microsoft COM AutomationではCOMオートメーション・データ型が使用され、Oracle COM AutomationではPL/SQLまたはJavaのデータ型が使用されるため、Oracle COM Automationでは、受け取ったデータを変換してCOMオートメーション・オブジェクトに渡す操作を行う必要があります。同様に、Oracle COM AutomationではCOMオートメーション・オブジェクトから受け取ったデータを渡して変換する必要があります。

PL/SQLのデータ型変換

表3-1は、PL/SQLデータ型とCOMオートメーション・データ型の間のマッピングを示したものです。

このマニュアルでは、COMオートメーション・データ型がIN OUTパラメータまたはOUTパラメータとして使用される場合、先頭にpを付けて表記しています。先頭の文字がp以外のデータ型は、INパラメータです。

表3-1 PL/SQLデータ型からCOMオートメーション・データ型への変換

PL/SQLデータ型 COMオートメーション・データ型

VARCHAR2

BSTR、pBSTR

BOOLEAN

BOOL、pBOOL

BINARY_INTEGER

DISPATCH、pDISPATCH

DOUBLE PRECISION

UI1、pUI1、I2、pI2、I4、pI4、R4、pR4、R8、pR8、SCODE、pSCODE、CY、pCY、DISPATCH、pDISPATCH

DATE

DATE、pDATE



注意:

Oracleでは、CYおよびpCYの値を-9999999999.9999〜9999999999.9999の範囲内に制限しています。

Javaのデータ型変換

表3-2は、サポートされるCOMオートメーション・データ型およびJavaデータ型への関連マッピングを示したものです。

戻り値のみに適用されるvoidを除き、すべてのデータ型マッピングは、プロパティ、引数および戻り値に適用されます。

表3-2 Javaデータ型からCOMオートメーション・データ型への変換

Javaデータ型 COMオートメーション・データ型

boolean

BOOL

char

CHAR

double

DOUBLE

int

INT

long

LONG

float

FLOAT

short

SHORT

byte

BYTE

java.lang.String

BSTR

oracle.win.com.Currency

CURRENCY

java.util.Calendar

DATE

void

VOID(戻り値のみ)

oracle.win.com.Automation

IDispatch*


HRESULTエラー・コード

HRESULTエラー・コードは、Microsoft Windows APIにより提供されています。

HRESULTは、0x800nnnnnという形式の16進数のCOMエラー・コードです。ただし、-214nnnnnnnという10進数形式もあります。たとえば、COMオブジェクトの作成時に不正なオブジェクト名が渡されると、HRESULT値-2147221005が返されます。これは16進数で表すと0x800401f3です。

HRESULTリターン・コードの詳細は、Microsoft社のドキュメントを参照してください。


関連項目:

詳細は、「Microsoft COM Automationのエラー」を参照してください。

PL/SQLでのHRESULTの使用

PL/SQL APIは、整数のリターン・コードを返します。成功のときは0を返し、エラーが発生したときは0以外のHRESULTを返します。


関連項目:

Oracle COM Automationから返されるリターン・コードの解釈方法の詳細は、「GetLastError」を参照してください。

JavaでのHRESULTの使用

Java APIでは、HRESULTCOMExceptionクラスのデータ・メンバーです。

Java用のOracle COM Automationの例外処理

Java用のOracle COM Automationは、標準のJava例外メカニズムを使用します。具体的には、Java例外クラスoracle.win.com.COMExceptionが、COMエラーを表すために組み込まれています。

この例外は、エラーの発生時にJavaのAutomationクラスでスローされます。

この例外で提供されるエラー情報は、PL/SQL APIのGetLastErrorファンクションで提供される情報と同様です。


注意:

HRESULTデータ・メンバーは、PL/SQLファンクションから返されるHRESULTの値と同じ意味を持ちます。

excepInfoデータ・メンバーで示されるCOMエラーがDISP_E_EXCEPTIONの場合、COMExceptionsourcedescriptionhelpfileおよびhelpidの各データ・メンバーを使用します。それ以外の場合、データ・メンバーは無効です。

COMExceptionは、COMエラーを表すエラー・メッセージをerrmsgデータ・メンバーに書き込みます。

表3-3は、COMExceptionデータ・メンバーと、その説明を示したものです。

表3-3 COMExceptionデータ・メンバー

メンバー 説明

hresult

Windows APIにより定義されているHRESULT値です。

errmsg

適切な言語でのHRESULTのテキスト表現です。

source

例外の発生元で、通常はアプリケーション名です。

description

エラーの説明です。

helpfile

エラーに関する詳細情報を含むヘルプ・ファイルの完全修飾パス名です。

helpid

helpfileで指定されたヘルプ・ファイル内のトピックのヘルプ・コンテキストIDです。

excepInfo

HRESULTがtrueを返す場合、DISP_E_EXCEPTIONで、sourcedescriptionhelpfileおよびhelpidには詳細情報が含まれます。


コード・サンプル

この例では、COMException例外を示します。

 try
   {
     // Some code that might throw a COMException exception.
   }
   catch(COMException e)
   {
     System.out.println(e.toString());
     if(e.excepInfo)
     {
       System.out.println(e.source);
       System.out.println(e.description);
       System.out.println(e.helpfile);
       System.out.println(e.helpid);
     }
   }

COM Automationの一般的な機能

この項では、Oracle COM Automationを使用したソリューションの開発に必要な情報および一般的な開発手順について説明します。

COMオブジェクトに関して必要な情報

使用するCOMオブジェクトに関して次の情報を確認します。

  • COMオブジェクトのプログラムIDを決定する必要があります。プログラムID(progID)は、Globally Unique Identifier(GUID)にマップされる説明的な文字列です。GUIDは16進の数値で、COMオブジェクトを一意に識別します。

    次の文字列は、progIDの例です。

    Excel.Worksheet.1
    
    

    progIDは、COMオブジェクトをインスタンス化するAPIで使用します。

  • COMオブジェクトのIDispatchインタフェースを通じて公開されるプロパティとメソッドの種類を知る必要があります。通常、オブジェクトのプロパティの名前とデータ型、およびオブジェクトのメソッドのプロトタイプが記述されたドキュメントがISVから提供されます。プロパティはxposyposのような説明的な文字列によって参照されます。プロパティにはINTBSTRなど、任意の標準COMオートメーション・データ型を使用できます。APIのGetPropertySetPropertyは、プロパティ名と適切なデータ型の変数を受け取ります。メソッドはInsertChartのような説明的な文字列によって参照されます。メソッドは、様々な種類のCOMオートメーション・データ型のパラメータ・セットを受け取り、COMオートメーション・データ型を返します。

    次に示すのは、COMインタフェース定義言語(IDL)の文法で記述された、COMオートメーション・メソッドのプロトタイプの例です。

    [id(0x6003000)]
    long Post([in, out] long* lngAccountNo,
              [in, out] long* lngAmount,
              [in, out] BSTR* strResult);
    
    

    インタフェースは、オブジェクト・メソッドおよびプロパティを定義します。COM IDLを使用し、COMオブジェクトに定義されているインタフェースを指定します。

OLE-COMオブジェクト ビューア

Microsoft社は、ローカル・システム上のCOMオブジェクトのプロパティおよびメソッドの表示用に、Microsoft Visual StudioのOLE-COMオブジェクト ビューアというツールを提供しています。このツールを使用することで、各COMオブジェクトが提供するプロパティとメソッドをすばやく、かつ容易に判断できます。図3-1の例を参照してください。

図3-1 OLE-COMオブジェクト ビューア

図3-1の説明が続きます
「図3-1 OLE-COMオブジェクト ビューア」の説明

COM AutomationのAPIの使用

Oracle COM Automationの代表的な使用例では、JavaクラスまたはPL/SQLブロックを設計し、COMオブジェクトを作成および操作します。クラスまたはコード・ブロックは、次の手順を実行します。

  1. COMオブジェクトを次のように作成します。

    • PL/SQLでは、CreateObjectを使用します。

    • Javaでは、コンストラクタまたはCreateメソッドを使用します。

  2. 次のAPIをコールしてCOMオブジェクトを操作します。

    • GetPropertyをコールして、プロパティ値を取得します。

    • SetPropertyをコールして、プロパティ値を新しい値に設定します。

  3. Invokeをコールして、メソッドをコールします。

    Invokeコールを準備するには、InitArgSetArgを使用して、COMオートメーション・メソッドに送られる引数をパッケージ化します。

  4. PL/SQLのGetLastErrorをコールして、最新のエラー情報を取得します。

  5. PL/SQLのDestroyObjectまたはJavaのDestroyを使用してオブジェクトを破棄します。

Application Program Interface

この項では、Oracle COM Automationで使用可能なAPIをリストし、説明します。

PL/SQL API

Oracle COM Automationで使用可能なPL/SQL開発用のAPIには、次のようなものがあります。

Java API

Oracle COM Automationで使用可能なJava開発用のAPIには、次のようなものがあります。

PL/SQL API

この項では、COMオートメーション・インタフェースを使用してCOMオブジェクトを操作するためのPL/SQL APIについて説明します。これらのPL/SQLストアド・プロシージャはそれぞれORDCOMパッケージに含まれています。

CreateObject

このAPIは、COM Automationサーバー内のCOMオブジェクトをインスタンス化します。

構文

FUNCTION CreateObject(progid VARCHAR2, reserved BINARY_INTEGER, servername VARCHAR2, 
objecttoken OUT BINARY_INTEGER) RETURN BINARY_INTEGER;

パラメータ 説明
progid 作成するCOMオートメーション・オブジェクトのプログラム識別子(progID)。この文字列は、COMオートメーション・オブジェクトのクラスを記述します。形式は次のとおりです。

COMComponent.Object

COMComponentはCOM Automationサーバーのコンポーネント名、ObjectはCOMオートメーション・オブジェクトの名前です。指定されたCOMオートメーション・オブジェクトは作成可能である必要があり、またIDispatchインタフェースをサポートしている必要があります。

reserved 将来の使用のために現在予約されているパラメータ。値0を渡してください。このパラメータは、今後のバージョンのOracle COM Automationで使用する可能性があります。
servername COMオブジェクトがインスタンス化されるリモートDCOMサーバーの名前。

名前を明示的に指定すると、Oracle COM Automationはリモート・コンピュータ上でCOMオブジェクトのインスタンス化を試みます。' 'のような空の文字列を渡すと、Oracle COM Automationはレジストリをチェックし、COMオブジェクトの場所を調べます。レジストリ情報は、COMオブジェクトがローカルかリモートかを示します。したがって、ローカルのCOMオブジェクトを作成する場合は、常に空の文字列を渡して、COMオブジェクトがローカルに存在することをレジストリが示していることを確認します。COMオブジェクトのレジストリ情報は、ツールdcomcnfg.exeを使用して構成できます。

objecttoken 返されるオブジェクト・トークン。データ型BINARY_INTEGERのローカル変数である必要があります。このオブジェクト・トークンは、作成されたCOMオートメーション・オブジェクトを識別し、他のOracle COM Automation APIコールで使用されます。

備考

作成されたCOMオートメーション・オブジェクトは、対応するDestroyObjectのコールによって解放されます。このコールにより、Oracle COM Automation内でのオブジェクトの内部表現が破棄され、オブジェクトに関連付けられたすべてのインタフェースが解放されます。

このファンクションは、成功のときは0を返し、エラーが発生したときは0以外のHRESULTを返します。

コード・サンプル

HRESULT BINARY_INTEGER;
applicationToken BINARY_INTEGER:=-1;

HRESULT :=ORDCOM.CreateObject('Excel.Application', 0, '', applicationToken);
IF (HRESULT!=0) THEN
  dbms_output.put_line(HRESULT);
END IF;

DestroyObject

このAPIは、作成されたCOMオートメーション・オブジェクトを破棄します。

構文

FUNCTION DestroyObject(objecttoken BINARY_INTEGER) RETURN BINARY_INTEGER;

パラメータ 説明
objecttoken 事前にCreateObjectによって作成されたCOMオートメーション・オブジェクトのオブジェクト・トークン。

備考

DestroyObjectをコールすると、Oracle COM Automation内でのオブジェクトの内部表現が破棄され、オブジェクトに関連付けられたすべてのインタフェースが解放されます。

このファンクションは、成功のときは0を返し、エラーが発生したときは0以外のHRESULTを返します。

コード・サンプル

HRESULT BINARY_INTEGER;
applicationToken BINARY_INTEGER:=-1;

/* Assume applicationToken is initialized. */

HRESULT:=ORDCOM.DestroyObject(applicationToken);
IF (HRESULT!=0) THEN
   dbms_output.put_line(HRESULT);

GetLastError

このAPIは、最後に発生したエラーについてのCOMオートメーション・エラー情報を取得します。

構文

FUNCTION GetLastError(source OUT VARCHAR2, description OUT VARCHAR2, helpfile OUT VARCHAR2, 
helpid OUT BINARY_INTEGER) RETURN BINARY_INTEGER;

パラメータ 説明
source エラー情報のソース。指定する場合、この値はCHAR型またはVARCHAR型のローカル変数である必要があります。戻り値は必要に応じて、ローカル変数として適切な値になるよう切り捨てられます。
description エラーの説明。指定する場合、この値はCHAR型またはVARCHAR型のローカル変数である必要があります。戻り値は必要に応じて、ローカル変数として適切な値になるよう切り捨てられます。
helpfile COMオートメーション・オブジェクトについてのヘルプ・ファイル。指定する場合、この値はCHAR型またはVARCHAR型のローカル変数である必要があります。戻り値は必要に応じて、ローカル変数として適切な値になるよう切り捨てられます。
helpid ヘルプ・ファイルのコンテキストID。指定する場合、この値はINT型のローカル変数である必要があります。

備考

GetLastErrorを除く)Oracle COM Automation APIコールごとにエラー情報がリセットされます。このため、GetLastErrorでは、最新のOracle COM Automation APIコールに対するエラー情報のみが取得されます。GetLastErrorは最後のエラー情報をリセットしないため、このAPIを複数回コールすると、同じエラー情報が取得されることがあります。

このファンクションは、成功のときは0を返し、エラーが発生したときは0以外のHRESULTを返します。

このファンクションによって返される可能性のあるエラーの種類については、「Microsoft COM Automationのエラー」を参照してください。

コード・サンプル

HRESULT BINARY_INTEGER;
applicationToken BINARY_INTEGER:=-1;
error_src VARCHAR2(255);
error_description VARCHAR2(255);
error_helpfile VARCHAR2(255);
error_helpID BINARY_INTEGER;

HRESULT:=ORDCOM.CreateObject('Excel.Application', 0, '', applicationToken);
IF (HRESULT!=0) THEN
  ORDCOM.GetLastError(error_src, error_description, error_helpfile,
      error_helpID);
  dbms_output.put_line(error_src);
  dbms_output.put_line(error_description);

  dbms_output.put_line(error_helpfile);
END IF;

GetProperty

このAPIは、COMオートメーション・オブジェクトのプロパティ値を返します。

構文

FUNCTION GetProperty(objecttoken BINARY_INTEGER, propertyname VARCHAR2, argcount BINARY_INTEGER, 
propertyvalue OUT any_PL/SQL_data type) RETURN BINARY_INTEGER;

パラメータ 説明
objecttoken 事前にCreateObjectによって作成されたCOMオブジェクトのオブジェクト・トークン。
propertyname 返されるCOMオブジェクトのプロパティ名。
argcount プロパティ配列のインデックス。プロパティが配列でない場合、この値には0を指定する必要があります。
propertyvalue 返されるプロパティ値。返されるプロパティの型は、返されるCOMオートメーションのデータ型によって異なります。COMオートメーション・プロパティのCOMオートメーション・データ型に対応するPL/SQLデータ型を渡す必要があります。そのようにしないと、COM AutomationによってCOMオートメーション・データ型が適切に変換されません。
any_PL/SQL_data type COM Automation機能でサポートされる任意のデータ型。

備考

プロパティがCOMオブジェクトを返す場合、propertyvalueパラメータにBINARY_INTEGERデータ型のローカル変数を指定する必要があります。オブジェクト・トークンはローカル変数に格納されます。格納されたオブジェクト・トークンは、他のCOMオートメーション・ストアド・プロシージャで使用できます。

プロパティが配列を返すとき、propertyvalueを指定するとその値はNULLに設定されます。

このファンクションは、成功のときは0を返し、エラーが発生したときは0以外のHRESULTを返します。

コード・サンプル

/*
 * This is an excerpt from a Microsoft Excel application.
 */

HRESULT BINARY_INTEGER;
ChartObject BINARY_INTEGER := -1;
ChartToken BINARY_INTEGER := -1;

/* Assume ChartObject is initialized. */

HRESULT := ORDCOM.GetProperty(ChartObject, 'Chart', 0, ChartToken);
IF (HRESULT!=0) THEN
  dbms_output.put_line(HRESULT);
END IF;

SetProperty

このAPIは、COMオートメーション・オブジェクトのプロパティを新しい値に設定します。

構文

FUNCTION SetProperty(objecttoken BINARY_INTEGER, propertyname VARCHAR2, 
newvalue any_PL/SQL_data type, data type VARCHAR2) RETURN BINARY_INTEGER;

パラメータ 説明
objecttoken 事前にCreateObjectによって作成されたCOMオートメーション・オブジェクトのオブジェクト・トークン。
propertyname 新しい値を設定するCOMオブジェクトのプロパティ名。
newvalue プロパティの新しい値。この値は適切なデータ型の値である必要があります。
data type 渡される値の、明示的に指定されるデータ型。有効なデータ型は次のとおりです。
  • UI1: バイト整数

  • I2: 2バイト整数

  • I4: 4バイト整数

  • R4: IEEE 4バイト実数

  • R8: IEEE 8バイト実数

  • SCODE: エラー・コード

  • CY: 通貨(-9999999999.9999〜9999999999.9999の値)

    (Oracleの制限)

  • DISPATCH: ディスパッチ・ポインタ

  • BSTR: 文字列

  • BOOL: ブール

  • DATE: 日付

any_PL/SQL_data type COM Automation機能でサポートされる任意のデータ型。

備考

このファンクションは、成功のときは0を返し、エラーが発生したときは0以外のHRESULTを返します。

コード・サンプル

/*
 * This is an excerpt from a Microsoft Excel application.
 */

HRESULT BINARY_INTEGER;
RangeToken BINARY_INTEGER := -1;

/* Assume RangeToken is initialized. */

HRESULT := ORDCOM.SetProperty(RangeToken, 'Value', 'EmpNo', 'BSTR');
IF (HRESULT!=0) THEN
  dbms_output.put_line(HRESULT);
END IF;


InitArg

このAPIは、Invokeコールに渡されるパラメータ・セットを初期化します。

構文

PROCEDURE InitArg();

備考

InitArgのコールにより、パラメータ・セットが初期化されます。InitArgのコール後、SetArgをコールすることにより、最初のパラメータが指定の値に設定されます。SetArgの2度目のコールでは、パラメータ・リスト中の2番目のパラメータが設定されます。以後のコールにより、パラメータ・リスト中のn番目のパラメータが設定されます。nは、InitArgのコール後にSetArgがコールされた回数です。InitArgをもう一度コールすると、引数リストはリセットされます。その後SetArgをコールすると、再び最初のパラメータが設定されます。

コード・サンプル

「Invoke」の項を参照してください。

InitOutArg

InitOutArgは、GetArgを使用してOUTパラメータおよびIN OUTパラメータの値を取得する準備として、COMメソッドがコールされた後にコールする必要があります。InitOutArgのコール後、GetArgの最初のコールで最初のOUTパラメータまたはIN OUTパラメータの値が取得され、2度目のGetArgコールで2番目のOUTパラメータまたはIN OUTパラメータの値が取得されます。以降も同様に取得されます。InitOutArgを再びコールすると、このプロセスが再び開始されます。

構文

PROCEDURE InitOutArg();

備考

INパラメータおよびOUTパラメータの詳細は、「SetArg」SetArgデータ型に関する記載を参照してください。

コード・サンプル

「Invoke」の項を参照してください。

GetArg

COMメソッドがコールされた後にOUTパラメータおよびIN OUTパラメータの引数を取得します。

構文

PROCEDURE GetArg(data OUT any_PL/SQL_data type, type VARCHAR2);

パラメータ 説明
data COMメソッドがコールされた後のOUTパラメータまたはIN OUTパラメータの値。
type パラメータのCOMオートメーション・データ型。

使用可能なデータ型は、次のとおりです。
  • pUI1: バイト整数

  • pI2: 2バイト整数

  • pI4: 4バイト整数

  • pR4: IEEE 4バイト実数

  • pR8: IEEE 8バイト実数

  • pSCODE: エラー・コード

  • pCY: 通貨(-9999999999.9999〜9999999999.9999の値)(Oracleの制限)

  • pDISPATCH: ディスパッチ・ポインタ

  • pBSTR: 文字列

  • pBOOL: ブール

  • pDATE: 日付

any_PL/SQL_data type COM Automation機能でサポートされる任意のデータ型。

備考

INパラメータおよびOUTパラメータの詳細は、「SetArg」SetArgデータ型に関する記載を参照してください。

コード・サンプル

「Invoke」の項を参照してください。

SetArg

このAPIを使用して、Invokeを次回コールするためのパラメータ・リストを構成します。

SetArgは、渡されるパラメータの値を設定します。

構文

PROCEDURE SetArg(paramvalue any_PL/SQL_data type, data type VARCHAR2);

パラメータ 説明
paramvalue Invokeコールに渡されるパラメータの値。設定されるパラメータは、パラメータ・リスト中のn番目のパラメータです。nは、InitArgのコール後にSetArgがコールされた回数です。
data type 明示的に指定されるパラメータのデータ型。

先頭の文字がpのデータ型は、IN OUTパラメータまたはOUTパラメータです。pは、COMオートメーション・データ型に対してVT_BYREFフラグが設定されることを示します。


先頭の文字がp以外のデータ型は、INパラメータです。使用可能なデータ型は、次のとおりです。
  • UI1: バイト整数

  • pUI1: バイト整数

  • I2: 2バイト整数

  • pI2: 2バイト整数

  • I4: 4バイト整数


  • pI4: 4バイト整数
  • R4: IEEE 4バイト実数

  • pR4: IEEE 4バイト実数

  • R8: IEEE 8バイト実数

  • pR8: IEEE 8バイト実数

  • SCODE: エラー・コード

  • pSCODE: エラー・コード


  • CY: 通貨(-9999999999.9999〜9999999999.9999の値)

    (Oracleの制限)

  • pCY: 通貨(-9999999999.9999〜9999999999.9999の値)

    (Oracleの制限)

  • DISPATCH: ディスパッチ・ポインタ

  • pDISPATCH: ディスパッチ・ポインタ

  • BSTR: 文字列

  • pBSTR: 文字列


  • BOOL: ブール
  • pBOOL: ブール

  • DATE: 日付

  • pDATE: 日付

any_PL/SQL_data type COM Automation機能でサポートされる任意のデータ型。

備考

SetArgプロシージャはそれぞれ、n番目のパラメータ値を設定します。InitArgのコールにより、パラメータ・セットが初期化されます。InitArgのコール後、SetArgをコールすることにより、最初のパラメータが指定の値に設定されます。SetArgの2度目のコールでは、パラメータ・リスト中の2番目のパラメータが設定されます。以後のコールにより、パラメータ・リスト中のn番目のパラメータが設定されます。nは、InitArgのコール後にSetArgがコールされた回数です。InitArgをもう一度コールすると、引数リストはリセットされます。その後SetArgをコールすると、再び最初のパラメータが設定されます。

先頭の文字がp以外のデータ型は、INパラメータです。先頭の文字がpのデータ型は、IN OUTパラメータまたはOUTパラメータです。

コード・サンプル

「Invoke」の項を参照してください。

Invoke

このAPIは、COMオートメーション・オブジェクトのメソッドをコールします。このファンクションでは、COMオートメーション・メソッドへの入力値として、InitArgおよびSetArgのコールによって事前に作成されたパラメータ・リストが使用されます。

構文

FUNCTION Invoke(objecttoken BINARY_INTEGER, methodname VARCHAR2, argcount BINARY_INTEGER, 
returnvalue OUT any_PL/SQL_data type) RETURN BINARY_INTEGER;

パラメータ 説明
objecttoken 事前にCreateObjectによって作成されたCOMオートメーション・オブジェクトのオブジェクト・トークン。
methodname コールするCOMオートメーション・オブジェクトのメソッド名。
argcount COMオートメーション・オブジェクトのメソッドに渡される引数の数。
returnvalue COMオートメーション・オブジェクトのメソッドの戻り値。指定される場合、この値は適切なデータ型のローカル変数である必要があります。
any_PL/SQL_data type COM Automation機能でサポートされる任意のデータ型。

備考

ファンクションの戻り値がCOMオブジェクトである場合、returnvalueパラメータに対しては、BINARY_INTEGERデータ型のローカル変数を指定する必要があります。オブジェクト・トークンはローカル変数に格納されます。格納されたオブジェクト・トークンは、他のOracle COM Automation APIで使用できます。

このファンクションは、成功のときは0を返し、エラーが発生したときは0以外のHRESULTを返します。

コード・サンプル

/*
* Following is the IDL definition of the COM Automation method
* being called:
*
* HRESULT TestOutArg([in, out] short *x1,
* [in] short x2,
* [out] short *x3,
* [out, retval] short *x4);
*/

HRESULT BINARY_INTEGER := -1;
applicationToken BINARY_INTEGER := -1;
x1 DOUBLE PRECISION := 12;
x2 DOUBLE PRECISION := 7;
x3 DOUBLE PRECISION := 0;
x4 DOUBLE PRECISION := 0;

/* Assume applicationToken is initialized. */

ORDCOM.InitArg();
ORDCOM.SetArg(x1, 'pI2');
ORDCOM.SetArg(x2, 'I2');
ORDCOM.SetArg(x3, 'pI2');

HRESULT := ORDCOM.Invoke(applicationToken, 'TestOutArg', 3, x4);
IF (HRESULT!=0) THEN
  dbms_output.put_line(HRESULT);
END IF;

ORDCOM.InitOutArg();
ORDCOM.GetArg(x1, 'pI2');
ORDCOM.GetArg(x3, 'pI2');

Java API

この項では、COMオートメーション・インタフェースを使用してCOMオブジェクトを操作するためのJava APIについて説明します。これらのAPIは、JavaのAutomationクラスおよびCurrencyクラスにあります。

JavaのAutomationクラスを使用し、COMオートメーションをサポートするCOMオブジェクトにアクセスできます。このJavaクラスでは、COMオブジェクトを作成し、COMオブジェクトのIDispatchインタフェースへのポインタを取得できます。さらに、COMオブジェクトに対してプロパティを取得および設定できる他、COMオブジェクトに対して(引数あり、または引数なしで)メソッドをコールできます。このクラスは、COMオブジェクトのラッパーを提供するため、COMオブジェクトまたはそのIDispatchインタフェースには直接アクセスしません。

JavaのCurrencyクラスは、COMオートメーション・データ型のCURRENCYに相当します。CURRENCYは8バイトの数値で、最後の4桁は値の小数部を表します。たとえば、12345という数値は、実際には1.2345という値を表します。CURRENCYの範囲は(+/-)922337203685477.5807です。

COMオブジェクト参照カウンティング

COMオブジェクト・インタフェース参照カウンティングは内部的に処理され、IUnknown::AddRef()およびIUnknown::Release()は公開されません。ユーザーは、COMオブジェクト・インタフェースを明示的にアドレス指定できません。特定のCOMオブジェクトの存続期間は、関連するJavaコンストラクタまたはCreateメソッドがコールされたときに開始し、対応するDestroyメソッドがコールされたときに解放されます。

コンストラクタおよびデストラクタ

デフォルトのコンストラクタはCOMオブジェクトを作成しません。COMオブジェクトを作成するには、2つの方法があります。

COMオブジェクト・エラーの処理

すべてのCOMエラーはJavaの例外にマップされます。ユーザーは、Javaの例外処理メカニズムによりCOMオブジェクト・エラーを捕捉できます。


注意:

Java用のOracle COM Automationでは、インプロセスCOM Automationサーバーを使用できません。開発者は、dllhostを使用し、インプロセス・サーバーをサポートできます。

Automationコンストラクタ

このAPIは、COMオブジェクトを作成します。

構文

  public Automation()
        public Automation(String progID)
        public Automation(String progID, String serverName)

パラメータ 説明
progID 作成するCOMオートメーション・オブジェクトのプログラム識別子(progID)。この文字列は、COMオートメーション・オブジェクトのクラスを記述します。形式は次のとおりです。

COMComponent.Object

COMComponentはCOM Automationサーバーのコンポーネント名、ObjectはCOMオートメーション・オブジェクトの名前です。指定されたCOMオートメーション・オブジェクトは作成可能である必要があり、またIDispatchインタフェースをサポートしている必要があります。

serverName COMオブジェクトがインスタンス化されるリモートDCOMサーバーの名前。

名前を明示的に指定すると、Oracle COM Automationはリモート・コンピュータ上でCOMオブジェクトのインスタンス化を試みます。

備考

デフォルトのコンストラクタpublic Automation()は何も行いません。このコンストラクタはCreateメソッドで使用されます。

progIDパラメータのみを受け取るコンストラクタを使用すると、Oracle COM AutomationはCOMオブジェクトの場所についてレジストリをチェックします。レジストリ情報は、COMオブジェクトがローカルかリモートかを示します。

デフォルト以外のコンストラクタを使用して作成されたCOMオートメーション・オブジェクトは、対応するDestroyのコールによって解放されます。このコールにより、Oracle COM Automation内でのオブジェクトの内部表現が破棄され、オブジェクトに関連付けられたすべてのインタフェースが解放されます。

Java用のOracle COM Automationでは、インプロセスCOM Automationサーバーを使用できません。開発者は、dllhostを使用し、インプロセス・サーバーをサポートできます。

エラーが発生した場合は、例外COMExceptionがスローされます。

コード・サンプル

次のコード・サンプルは、デフォルト以外のコンストラクタを示しています。

 // Use the registry to determine where to create the COM object.
   Automation word = new Automation("Word.Basic");

   // Create the COM object on the specified server.
   Automation excel = new Automation("Excel.Application",
                                     "\\ServerName");

   // Free the COM objects.
   word.Destroy();
   excel.Destroy();

Create

このAPIは、COM Automationサーバー内のCOMオブジェクトをインスタンス化します。

構文

public void Create(String progID)
public void Create(String progID, String serverName)

パラメータ 説明
progID 作成するCOMオートメーション・オブジェクトのプログラム識別子(progID)。この文字列は、COMオートメーション・オブジェクトのクラスを記述します。形式は次のとおりです。

COMComponent.Object

COMComponentはCOM Automationサーバーのコンポーネント名、ObjectはCOMオートメーション・オブジェクトの名前です。指定されたCOMオートメーション・オブジェクトは作成可能である必要があり、またIDispatchインタフェースをサポートしている必要があります。

serverName COMオブジェクトがインスタンス化されるリモートDCOMサーバーの名前。

名前を明示的に指定すると、Oracle COM Automationはリモート・コンピュータ上でCOMオブジェクトのインスタンス化を試みます。

備考

Createメソッドで作成されたCOMオートメーション・オブジェクトは、対応するDestroyのコールによって解放されます。このコールにより、Oracle COM Automation内でのオブジェクトの内部表現が破棄され、オブジェクトに関連付けられたすべてのインタフェースが解放されます。

progIDパラメータのみを受け取るコンストラクタを使用すると、Oracle COM AutomationはCOMオブジェクトの場所についてレジストリをチェックします。レジストリ情報は、COMオブジェクトがローカルかリモートかを示します。

Java用のOracle COM Automationでは、インプロセスCOM Automationサーバーを使用できません。開発者は、dllhostを使用し、インプロセス・サーバーをサポートできます。

エラーが発生した場合は、例外COMExceptionがスローされます。

コード・サンプル

  // Use the default constructor.
   Automation word = new Automation();
   Automation excel = new Automation();

   // Use the registry to determine where to create the COM object.
   word.Create("Word.Basic");

   // Create the COM object on the specified server system.
   excel.Create("Excel.Application", "\\ServerName");

   // Free the COM objects.
   word.Destroy();
   excel.Destroy();

Destroy

このAPIは、作成されたCOMオートメーション・オブジェクトを破棄します。

構文

  public void Destroy()

備考

Destroyをコールすると、Oracle COM Automation内でのオブジェクトの内部表現が破棄され、オブジェクトに関連付けられたすべてのインタフェースが解放されます。

コード・サンプル

「Create」の項を参照してください。

GetProperty

このAPIは、COMオートメーション・オブジェクトのプロパティ値を取得します。

構文

public allowed_type GetProperty(String propName, allowed_type[] propVal)

パラメータ 説明
propName 返されるCOMオブジェクトのプロパティ名。
propVal 返されるプロパティ値。返されるプロパティの型は、返されるCOMオートメーションの型によって異なります。プロパティを返すためにアクセスされる要素は最初の要素のみですが、配列は少なくとも1つの要素を保持できる大きさである必要があります。
allowed_type 次のリストのいずれかの型。

  • boolean
  • byte

  • char

  • short

  • int

  • long

  • float

  • double

  • java.long.String

  • oracle.win.com.Automation

  • oracle.win.com.Currency

  • java.util.Calendar


備考

プロパティがCOMオブジェクトの場合は、oracle.win.com.Automationallowed_typeを使用して取得できます。返されるオートメーションJavaオブジェクトは、プロパティの取得と設定、およびプロパティに対するメソッドのコールに使用できます。

GetPropertyは、GetPropertyメソッドをオーバーロードするために、配列パラメータを使用してプロパティ値を返します。プロパティ値が戻り値として返された場合はオーバーロードできません。配列は、outパラメータを持たないJavaが原因で発生する問題を解決します。

プロパティは、便宜上戻り値として返されます。

エラーが発生した場合は、例外COMExceptionがスローされます。

コード・サンプル

   // A Microsoft Excel ChartObject object.
   Automation chartObject = null;
   // A Microsoft Excel Chart object.
   Automation chart = null;
   // Used for properties of type Automation.
   Automation[] autoProp = { null };

   // Assume the Microsoft Excel ChartObject object is initialized.

   // Get the Chart property.
   chartObject.GetProperty("Chart", autoProp);
   chart = autoProp[0];

   // Set the Chart property.
   chartObject.SetProperty("Chart", chart);

SetProperty

このAPIは、COMオートメーション・オブジェクトのプロパティを新しい値に設定します。

構文

public void SetProperty(String propName, allowed_type propVal)

パラメータ 説明
propName 新しい値を設定するCOMオブジェクトのプロパティ名。
propVal プロパティの新しい値。この値は適切なデータ型の値である必要があります。
allowed_type 次のリストのいずれかの型。

  • boolean
  • byte

  • char

  • short

  • int

  • long

  • float

  • double

  • java.long.String

  • oracle.win.com.Automation

  • oracle.win.com.Currency

  • java.util.Calendar


備考

プロパティがCOMオブジェクトの場合は、oracle.win.com.Automationのallowed_typeを使用して設定できます。プロパティ値は、有効なオートメーションJavaオブジェクトである必要があります。

エラーが発生した場合は、例外COMExceptionがスローされます。

コード・サンプル

「GetProperty」の項を参照してください。

InitArg

このAPIは、Invokeコールに渡されるパラメータ・セットを初期化します。

構文

public void InitArg()

備考

InitArgコールは、パラメータ・セットを初期化し、COMメソッドがパラメータを受け取らない場合でもコールする必要があります。InitArgのコール後、SetArgをコールすることにより、最初のパラメータが指定の値に設定されます。SetArgの2度目のコールでは、パラメータ・リスト中の2番目のパラメータが設定されます。以後のコールにより、パラメータ・リスト中のn番目のパラメータが設定されます。nは、InitArgのコール後にSetArgがコールされた回数です。InitArgをもう一度コールすると、引数リストはリセットされます。その後SetArgをコールすると、再び最初のパラメータが設定されます。

コード・サンプル

「Invoke」の項を参照してください。

SetArg

このAPIを使用して、Invokeを次回コールするためのパラメータ・リストを構成します。

構文

public void SetArg(allowed_type val)

パラメータ 説明
val Invokeコールに渡されるパラメータの値。設定されるパラメータは、パラメータ・リスト中のn番目のパラメータです。nは、InitArgのコール後にSetArgがコールされた回数です。
allowed_type 次のリストのいずれかの型。

  • boolean
  • byte

  • char

  • short

  • int

  • long

  • float

  • double


  • java.long.String
  • oracle.win.com.Automation

  • oracle.win.com.Currency

  • java.util.Calendar


備考

パラメータがCOMオブジェクトの場合、対応する引数のallowed_typeoracle.win.com.Automationである必要があります。引数は、有効なオートメーションJavaオブジェクトである必要があります。

この時点で例外はスローされません。ただし、エラーが発生した場合、たとえば不正な引数の型が渡された場合は、Invokeメソッドがコールされたときにエラーが捕捉されます。

コード・サンプル

「Invoke」の項を参照してください。

Invoke

COMオートメーション・オブジェクトのメソッドをコールします。このファンクションでは、COMオートメーション・メソッドへの入力値として、InitArgおよびSetArgへのコールによって事前に作成されたパラメータ・リストが使用されます。

構文

public void Invoke(String methodName, allowed_type[] retVal)
public void Invoke(String methodName)

パラメータ 説明
methodName コールするCOMオートメーション・オブジェクトのメソッド名。
retVal COMオートメーション・オブジェクトのメソッドの戻り値。指定される場合、この値は適切なデータ型のローカル変数である必要があります。プロパティを返すためにアクセスされる要素は最初の要素のみですが、配列は少なくとも1つの要素を保持できる大きさである必要があります。
allowed_type 次のリストのいずれかの型。

  • boolean
  • byte

  • char

  • short

  • int

  • long

  • float

  • double

  • java.long.String

  • oracle.win.com.Automation

  • oracle.win.com.Currency

  • java.util.Calendar


備考

COMメソッドが戻り値としてCOMオブジェクトを返す場合、戻り値のallowed_typeoracle.win.com.Automationです。返されるオートメーションJavaオブジェクトは、プロパティの取得と設定、および戻り値に対するメソッドのコールに使用できます。

Invokeメソッドをオーバーロードするには、Invokeが配列パラメータを使用してCOMオブジェクト・メソッドの値を返す必要があります。プロパティ値が戻り値として返された場合はオーバーロードできません。配列は、outパラメータを持たないJavaが原因で発生する問題を解決します。

1つのパラメータのみを受け取るInvokepublic void Invoke(String methodName)は、戻り値がvoid型のCOMオブジェクト・メソッドで使用されます。

プロパティは、便宜上戻り値として返されます。

エラーが発生した場合は、例外COMExceptionがスローされます。

コード・サンプル

   // A Microsoft Excel Worksheet object.
   Automation workSheet = null;
   // A Microsoft Excel ChartObjects collection object.
   Automation chartObjects = null;
   // A Microsoft Excel ChartObject object.
   Automation chartObject = null;
   // Used for return values of type Automation.
   Automation[] autorv = { null };
   // Dimensions for a Microsoft Excel ChartObject object.
   short xpos = 100, ypos = 30, width = 400, height = 250;

   // Assume the Microsoft Excel Worksheet object is initialized.

   // Invoke a method that takes no arguments.
   workSheet.InitArg();
   workSheet.Invoke("ChartObjects", autorv);
   chartObjects = autorv[0];

   // Invoke a method that takes multiple arguments.
   chartObjects.InitArg();
   chartObjects.SetArg(xpos);
   chartObjects.SetArg(ypos);
   chartObjects.SetArg(width);
   chartObjects.SetArg(height);
   chartObjects.Invoke("Add", autorv);
   chartObject = autorv[0];

Currencyコンストラクタ

このAPIは、Javaオブジェクトcurrencyを作成します。

構文

public Currency(long value)

パラメータ 説明
value 8バイトのCURRENCY数値

Get

このAPIは、8バイトのCURRENCY数値を取得します。

構文

public long Get()

備考

8バイトのCURRENCY数値を返します。

Set

このAPIは、8バイトのCURRENCY数値を設定します。

構文

public void Set(long value)

パラメータ 説明
value 8バイトのCURRENCY数値