18.3.1 INVOKE文(OLE2オートメーションインタフェース機能)
- 【標準仕様との関連】
-
「COBOL2002 言語 標準仕様編」 「10.8.26 INVOKE文」
(1) 一般的なOLEメソッドの操作
- 形式
-
- 機能
-
OLE2オートメーションサーバアプリケーションの一般的なOLEメソッド操作(CREATEOBJ,GETOBJ以外)をする。
- 構文規則
-
-
一意名7はOLEオブジェクト参照データ項目でなければならない。
-
一意名8および一意名10は,集団項目,英字,英数字,日本語項目でなければならない。
-
定数3および定数5は,英数字定数または日本語文字定数でなければならない。
-
一意名9,一意名11には,集団項目,数字項目,英字項目,英数字項目,日本語項目,1けたのブール項目,OLEオブジェクト参照データ項目およびバリアントデータ項目が指定できる。ただし,一意名11は強く型付けされた集団項目を指すものであってはならない。
-
一意名9には数字編集項目も指定できる。
-
定数4には,数字定数,英数字定数,日本語文字定数,1けたのブール定数および表意定数(ZERO,NULL)が指定できる。
-
-UniObjGenオプションを指定した場合,一意名8,一意名9,一意名10および一意名11には用途がNATIONALの項目および用途がNATIONALの項目を従属項目として含む集団項目は指定できない。-UniObjGenオプションについては,マニュアル「COBOL2002 ユーザーズガイド」のUnicode機能を参照のこと。
-
-UniObjGenオプションを指定した場合,定数3,定数4および定数5には日本語文字定数および16進日本語文字定数は指定できない。-UniObjGenオプションについては,マニュアル「COBOL2002 ユーザーズガイド」のUnicode機能を参照のこと。
-
- 一般規則
-
-
OLE2オートメーションサーバアプリケーションのOLEメソッド操作では,一意名7に,インスタンスのOLEオブジェクトが設定されているOLEオブジェクト参照データ項目を指定しなければならない。一意名7にOLEオブジェクトが設定されていない場合は,実行時にエラーとなる。
-
一意名7に設定されているOLEオブジェクトを起点として,一意名8または定数3で指定されたOLEメソッドが操作される。
-
一意名8や定数3に指定するOLEメソッドには,起点となるOLEオブジェクトからのコンテナやコレクションを含んで指定しなければならない。
-
一意名9,定数4には,OLEメソッドへの引数を指定する。引数は指定された順番にOLEメソッドに渡される。引数を省略して指定する場合は,表意定数NULLを指定する。一意名9,定数4で指定したCOBOLのデータ項目は,「表18‒1 COBOLデータ項目からVARIANT値への変換規則」の変換規則に従いVARIANT値に変換されてOLEメソッドに渡される。一意名9でバリアントデータ項目を指定した場合は,VARIANT値は変換されずにそのままOLEメソッドに渡される。
-
一意名11にはOLEメソッドからの戻り値が設定される。
・戻り値がOLEオブジェクトを戻す場合は,OLEオブジェクト参照データ項目を指定する。
・戻り値がOLEオブジェクトでない場合は,COBOLのデータ項目を指定するか,またはバリアントデータ項目を指定する。
COBOLのデータ項目を指定した場合は,「表18‒2 VARIANT値からCOBOLデータ項目への変換規則」の変換規則に従い,VARIANT値からCOBOLのデータ項目に変換されて設定される。
VARIANT値から変換できないCOBOLのデータ項目が指定されている場合は,実行時にエラーとなる。
また,バリアントデータ項目が指定された場合は,取得されたVARIANT値へのポインタが設定される。
一意名11に10けたを超えるまたは小数けたがある数字項目(固定小数点形式の数字項目)を指定した場合は,内部的に確保した倍精度内部浮動小数点項目領域に格納された戻り値が,一意名11に設定される。
この結果,システムによる丸め制御の相違によって,浮動小数点の転記の結果が異なる場合がある。
丸め制御については,「6.8.1 文に共通な指定と規則(浮動小数点形式データを扱う機能)」の「(7) 浮動小数点の丸め制御」を参照のこと。
-
一意名10および定数5には,OLEメソッドの名前付き引数の名称を指定する。
-
名前付き引数を使うと,あらかじめ指定されている名前を持った引数を指定できるため,構文で決まっている順序とは関係なく,必要な引数だけを任意の順序で指定できる。
-
(2) CREATEOBJメソッドの操作
- 形式
-
- 機能
-
CREATEOBJメソッドでは,OLEオブジェクトのインスタンスを生成する。
- 構文規則
-
-
一意名10は,英字項目,英数字項目または日本語項目でなければならない。
-
定数6は,英数字定数または日本語文字定数でなければならない。
-
一意名11は,OLEオブジェクト参照データ項目でなければならない。
-
-UniObjGenオプションを指定した場合,一意名10には用途がNATIONALの項目および用途がNATIONALの項目を従属項目として含む集団項目は指定できない。-UniObjGenオプションについては,マニュアル「COBOL2002 ユーザーズガイド」のUnicode機能を参照のこと。
-
-UniObjGenオプションを指定した場合,定数6には日本語文字定数および16進日本語文字定数は指定できない。-UniObjGenオプションについては,マニュアル「COBOL2002 ユーザーズガイド」のUnicode機能を参照のこと。
-
- 一般規則
-
-
一意名10または定数6には,操作の対象となるOLE2オートメーションサーバアプリケーションのクラス名を設定する。
-
生成されたインスタンスのOLEオブジェクトは,一意名11で指定されたOLEオブジェクト参照データ項目に格納される。操作の対象となるOLE2オートメーションサーバアプリケーションのクラス名でない値が設定されている場合は,実行時にエラーとなる。
-
OLEオブジェクトのインスタンスがすでに生成されて,OLEオブジェクト参照データ項目に値が格納されていても,再実行された場合は,新たにOLEオブジェクトのインスタンスを生成し,OLEオブジェクト参照データ項目に新しいOLEオブジェクトが格納される。
-
生成したOLEオブジェクトが不要になった場合は,OLE2オートメーションサーバアプリケーションが提供する終了メソッドで解放しなければならない。
-
(3) GETOBJメソッドの操作
- 形式
-
- 機能
-
GETOBJメソッドでは,実行中のOLEオブジェクトを取得したり,ファイルからOLEオブジェクトのインスタンスを生成する。
- 構文規則
-
-
一意名12および一意名13は,英字項目,英数字項目または日本語項目でなければならない。
-
定数7は,英数字定数,日本語文字定数または表意定数NULLでなければならない。
-
定数8は,英数字定数または日本語文字定数でなければならない。
-
一意名14は,OLEオブジェクト参照データ項目でなければならない。
-
-UniObjGenオプションを指定した場合,一意名12および一意名13には用途がNATIONALの項目および用途がNATIONALの項目を従属項目として含む集団項目は指定できない。-UniObjGenオプションについては,マニュアル「COBOL2002 ユーザーズガイド」のUnicode機能を参照のこと。
-
-UniObjGenオプションを指定した場合,定数7および定数8には日本語文字定数および16進日本語文字定数は指定できない。-UniObjGenオプションについては,マニュアル「COBOL2002 ユーザーズガイド」のUnicode機能を参照のこと。
-
- 一般規則
-
-
一意名12または定数7には,操作の対象となるOLE2オートメーションサーバアプリケーションのクラス名を設定する。
-
一意名13または定数8には,ディスク上にあるファイル名を絶対パスで指定しなければならない。
-
USING指定の有無によって,生成されているインスタンスのOLEオブジェクトを取得する方法と,新しくインスタンスのOLEオブジェクトを生成する方法がある。
・USING指定がない場合は,すでに生成されているインスタンスからOLEオブジェクトを取得する。取得したOLEオブジェクトは,一意名14で指定されたOLEオブジェクト参照データ項目に格納される。クラス名に対応したOLEオブジェクトのインスタンスが生成されていない場合は,実行時にエラーとなる。
また,複数のインスタンスが存在する場合,どんなインスタンスのOLEオブジェクトが取得されるかは保証しない。
・USING指定がある場合は,指定されたファイル名からクラス名に対応したOLEオブジェクトのインスタンスを生成する。クラス名のOLEオブジェクトに,対応していないファイル名が指定された場合は,実行時にエラーとなる。
クラス名の指定がない場合(定数7に表示定数NULLが指定された場合)は,ファイル名に基づいてOLEオブジェクトのインスタンスを生成する。またファイル名からOLEオブジェクトのインスタンスが生成された場合に,同じOLEオブジェクトのインスタンスがすでに生成されてOLEオブジェクト参照データ項目にOLEオブジェクトが格納されていても,新しく生成されたOLEオブジェクトがOLEオブジェクト参照データ項目に設定される。
-
生成したOLEオブジェクトが不要になった場合は,OLE2オートメーションサーバアプリケーションが提供する終了メソッドで解放しなければならない。
-