COBOL2002 ユーザーズガイド
ここでは,サービスルーチンを使ってOLE2オートメーションクライアント機能を使用する方法について説明します。
なお,通常OLE2オートメーションクライアント機能を使用する場合は,「26.2 OLE2オートメーションクライアント機能」に示す方法を使用してください。
OLE2オートメーションクライアント機能を使用するためにCOBOL2002が用意しているサービスルーチンの種類を次に示します。なお,サービスルーチンは,表中の呼び出し順序に従って呼び出す必要があります。
呼び出し順序 | サービスルーチン | 機能 |
---|---|---|
1 | CBLOLE2INIT | OLE2を初期設定する。 |
2 | CBLCREATEOBJ | 操作したいOLE2サーバのOLEオブジェクトを生成する。 |
CBLGETOBJ | 操作したいOLE2サーバのOLEオブジェクトを取得する。 | |
3 | CBLGETPROPERTY | OLE2サーバのOLEプロパティの値を取得する。 |
CBLPUTPROPERTY | OLE2サーバのOLEプロパティに値を設定する。 | |
CBLMETHODCALL | OLE2サーバのOLEメソッドを操作する。 | |
CBLVARIANTINF | VARIANT値の属性を調べる。 | |
CBLSETCBLITEM | VARIANT値からCOBOLデータ項目に変換する。 | |
CBLSETVARIANT | COBOLデータ項目からVARIANT値に変換する。 | |
4 | CBLOLE2UNINIT | OLE2を終了させる。 |
なお,各サービスルーチンの「戻り値」に記されているエラーコード値の内容については,「(3) エラーコード値」を参照してください。
サービスルーチンの詳細を以下に示します。
なお,使用例のプログラムを64bit版PC(x64) COBOL2002で使用する場合は,読み替えが必要です。
01 ARG1 PIC 9(9) USAGE COMP VALUE ZERO.
01 ARG1 PIC 9(18) USAGE COMP VALUE ZERO.
OLE2の初期値を設定するサービスルーチンです。
CALL 'CBLOLE2INIT' USING BY VALUE 引数1 BY REFERENCE 引数2.
01 引数2. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO.
DATA DIVISION. WORKING-STORAGE SECTION. 01 ARG1 PIC 9(9) USAGE COMP VALUE ZERO. 01 PRMINIT. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. : PROCEDURE DIVISION. : CALL 'CBLOLE2INIT' USING BY VALUE ARG1 BY REFERENCE PRMINIT.
OLE2サーバのOLEオブジェクトを生成します。
CALL 'CBLCREATEOBJ' USING BY VALUE 引数1 BY REFERENCE 引数2 引数3.
01 引数2 USAGE ADDRESS.
01 引数3. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. … 1. 02 データ名1 PIC 9(9) USAGE COMP. … 2. 02 データ名2 USAGE ADDRESS. … 3.
01 データ名 PIC X(xx).
DATA DIVISION. WORKING-STORAGE SECTION. 01 ARG1 PIC 9(9) USAGE COMP VALUE ZERO. 01 PRMOBJ USAGE ADDRESS. 01 PRMCREATEOBJ. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. 02 CLSLENG PIC 9(9) COMP VALUE 17. 02 CLSNAMEPTR USAGE ADDRESS. 01 CLASSNAME PIC X(17) VALUE 'Excel.Application'. : PROCEDURE DIVISION. COMPUTE PRMOBJ = ZERO. COMPUTE CLSNAMEPTR = FUNCTION ADDR(CLASSNAME). CALL 'CBLCREATEOBJ' USING BY VALUE ARG1 BY REFERENCE PRMOBJ PRMCREATEOBJ.
OLE2サーバのOLEオブジェクトをファイルから取得する場合,またはすでにOLE2サーバが起動している場合に,そのOLE2サーバのOLEオブジェクトを取得するサービスルーチンです。
CALL 'CBLGETOBJ' USING BY VALUE 引数1 BY REFERENCE 引数2 引数3.
01 引数2 USAGE ADDRESS.
01 引数3. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. … 1. 02 データ名1 PIC 9(9) USAGE COMP. … 2. 02 データ名2 USAGE ADDRESS. … 3. 02 データ名3 PIC 9(9) USAGE COMP. … 4. 02 データ名4 USAGE ADDRESS. … 5.
01 引数3. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. … 1. 02 データ名1 PIC 9(9) USAGE COMP. … 2. 02 データ名2 USAGE ADDRESS. … 3. 02 データ名3 PIC 9(9) USAGE COMP. … 4. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. … 1. 02 データ名4 USAGE ADDRESS. … 5.
DATA DIVISION. WORKING-STORAGE SECTION. 01 ARG1 PIC 9(9) USAGE COMP VALUE ZERO. 01 PRMOBJ USAGE ADDRESS. 01 PRMGETOBJ. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. 02 FILELENG PIC 9(9) USAGE COMP VALUE 16. 02 FILENAMEPTR USAGE ADDRESS. 02 CLSLENG PIC 9(9) USAGE COMP VALUE 11. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO.※ 02 CLSNAMEPTR USAGE ADDRESS. 01 FILENAME PIC X(16) VALUE 'c:\temp\data.xls'. 01 CLASSNAME PIC X(11) VALUE 'Excel.Sheet'. : PROCEDURE DIVISION. COMPUTE PRMOBJ = ZERO. COMPUTE FILENAMEPTR = FUNCTION ADDR(FILENAME). COMPUTE CLSNAMEPTR = FUNCTION ADDR(CLASSNAME). CALL 'CBLGETOBJ' USING BY VALUE ARG1 BY REFERENCE PRMOBJ PRMGETOBJ.
OLE2サーバのOLEオブジェクトのOLEプロパティの値を取得するサービスルーチンです。
CALL 'CBLGETPROPERTY' USING BY VALUE 引数1 BY REFERENCE 引数2 引数3 引数4.
01 引数2 USAGE ADDRESS.
01 引数3 USAGE ADDRESS.
01 引数4. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. … 1. 02 データ名1 PIC 9(9) USAGE COMP. … 2. 02 データ名2 USAGE ADDRESS. … 3.
01 データ名 PIC X(xx).
DATA DIVISION. WORKING-STORAGE SECTION. 01 ARG1 PIC 9(9) USAGE COMP VALUE ZERO. 01 PRMOBJ USAGE ADDRESS. 01 PRMVARIANT USAGE ADDRESS. 01 PRMGETPROPERTY. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. 02 STRINGLENG PIC 9(9) USAGE COMP VALUE 43. 02 STRINGNAMEPTR USAGE ADDRESS. 01 STRINGNAME PIC X(43)VALUE 'Workbooks(1).Worksheets(1).Cells(1,1). Value'. : PROCEDURE DIVISION. CALL 'CBLCREATEOBJ' USING … COMPUTE PRMVARIANT = ZERO. COMPUTE STRINGNAMEPTR = FUNCTION ADDR(STRINGNAME). CALL 'CBLGETPROPERTY' USING BY VALUE ARG1 BY REFERENCE PRMOBJ PRMVARIANT PRMGETPROPERTY.
OLE2オートメーションサーバ機能のOLEオブジェクトのOLEプロパティに値を設定するサービスルーチンです。
CALL 'CBLPUTPROPERTY' USING BY VALUE 引数1 BY REFERENCE 引数2 引数3 引数4.
01 引数2 USAGE ADDRESS.
01 引数3 USAGE ADDRESS.
01 引数4. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. … 1. 02 データ名1 PIC 9(9) USAGE COMP. … 2. 02 データ名2 USAGE ADDRESS. … 3.
01 データ名 PIC X(xx).
DATA DIVISION. WORKING-STORAGE SECTION. 01 ARG1 PIC 9(9) USAGE COMP VALUE ZERO. 01 PRMOBJ USAGE ADDRESS. 01 PRMVARIANT USAGE ADDRESS. 01 PRMPUTPROPERTY. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. 02 STRINGLENG PIC 9(9) USAGE COMP VALUE 43. 02 STRINGNAMEPTR USAGE ADDRESS. 01 STRINGNAME PIC X(43) VALUE 'Workbooks(1).Worksheets(1).Cells(1,1).Value'. : PROCEDURE DIVISION. CALL 'CBLCREATEOBJ' USING … COMPUTE PRMVARIANT = (CBLSETVARIANTサービスルーチンで 変換したVARIANT値). COMPUTE STRINGNAMEPTR = FUNCTION ADDR(STRINGNAME). CALL 'CBLPUTPROPERTY' USING BY VALUE ARG1 BY REFERENCE PRMOBJ PRMVARIANT PRMPUTPROPERTY.
OLE2サーバのOLEオブジェクトのOLEメソッドを操作するサービスルーチンです。
CALL 'CBLMETHODCALL' USING BY VALUE 引数1 BY REFERENCE 引数2 引数3 引数4.
01 引数2 USAGE ADDRESS.
01 引数3 USAGE ADDRESS.
01 引数4. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. … 1. 02 データ名1 PIC 9(9) USAGE COMP. … 2. 02 データ名2 USAGE ADDRESS. … 3. 02 データ名3 PIC 9(9) USAGE COMP. … 4. 02 データ名4 USAGE ADDRESS. … 5.
01 引数4. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. … 1. 02 データ名1 PIC 9(9) USAGE COMP. … 2. 02 データ名2 USAGE ADDRESS. … 3. 02 データ名3 PIC 9(9) USAGE COMP. … 4. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. … 1. 02 データ名4 USAGE ADDRESS. … 5.
DATA DIVISION. WORKING-STORAGE SECTION. 01 ARG1 PIC 9(9) USAGE COMP VALUE ZERO. 01 PRMOBJ USAGE ADDRESS. 01 PRMVARIANT USAGE ADDRESS. 01 PRMMETHODCALL. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. 02 STRINGLENG PIC 9(9) USAGE COMP VALUE 48. 02 STRINGNAMEPTR USAGE ADDRESS. 02 VARTBLCNT PIC 9(9) USAGE COMP VALUE ZERO. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO.※ 02 VARTBLPTR USAGE ADDRESS. 01 STRINGNAME PIC X(48) VALUE 'InputBox(''Please Input Data'', - '''COBOL InputBox'')'. * : PROCEDURE DIVISION. COMPUTE PRMVARIANT = ZERO. COMPUTE VARTBLPTR = ZERO. COMPUTE STRINGNAMEPTR = FUNCTION ADDR(STRINGNAME). CALL 'CBLMETHODCALL' USING BY VALUE ARG1 BY REFERENCE PRMOBJ PRMVARIANT PRMMETHODCALL.
CBLGETPROPERTY,CBLMETHODCALL,およびCBLSETVARIANTサービスルーチンが得るVARIANT値の属性を取得するサービスルーチンです。CBLVARIANTINFは,取得した属性の値によってCBLSETCBLITEMサービスルーチンでの処理を選択するのに使用します。
CALL 'CBLVARIANTINF' USING BY VALUE 引数1 BY REFERENCE 引数2 引数3 引数4.
01 引数2 USAGE ADDRESS.
01 引数3 PIC 9(9) USAGE COMP.
01 引数4. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO.
DATA DIVISION. WORKING-STORAGE SECTION. 01 ARG1 PIC 9(9) USAGE COMP VALUE ZERO. 01 PRMOBJ USAGE ADDRESS. 01 PRMVARIANT USAGE ADDRESS. 01 PRMVARTYPE PIC 9(9) USAGE COMP VALUE ZERO. 01 PRMGETPROPERTY. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. 02 STRINGLENG PIC 9(9) USAGE COMP VALUE 43. 02 STRINGNAMEPTR USAGE ADDRESS. 01 STRINGNAME PIC X(43) VALUE 'Workbooks(1).Worksheets(1).Cells(1,1).Value'. 01 PRMVARIANTINF. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. : PROCEDURE DIVISION. CALL 'CBLCREATEOBJ' USING … COMPUTE PRMVARIANT = ZERO. COMPUTE STRINGNAMEPTR = FUNCTION ADDR(STRINGNAME). CALL 'CBLGETPROPERTY' USING BY VALUE ARG1 BY REFERENCE PRMOBJ PRMVARIANT PRMGETPROPERTY. CALL 'CBLVARIANTINF' USING BY VALUE ARG1 BY REFERENCE PRMVARIANT PRMVARTYPE PRMVARIANTINF.
CBLGETPROPERTYまたはCBLMETHODCALLサービスルーチンで取得したVARIANTの値を指定したCOBOLのデータ項目に変換し,設定するサービスルーチンです。
CALL 'CBLSETCBLITEM' USING BY VALUE 引数1 BY REFERENCE 引数2 引数3.
01 引数2 USAGE ADDRESS.
01 引数3. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. … 1. 02 データ名1 PIC 9(9) USAGE COMP. … 2. 02 データ名2 USAGE ADDRESS. … 3.
DATA DIVISION. WORKING-STORAGE SECTION. 01 ARG1 PIC 9(9) USAGE COMP VALUE ZERO. 01 PRMOBJ USAGE ADDRESS. 01 PRMVARIANT USAGE ADDRESS. 01 PRMSETCBLITEM. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. 02 VARTYPE PIC 9(9) USAGE COMP VALUE 8. 02 CBLITEMPTR USAGE ADDRESS. 01 CBLITEM. 02 ITEMLENG PIC 9(9) USAGE COMP VALUE 255. 02 ITEMSTRING PIC X(255). : PROCEDURE DIVISION. COMPUTE PRMVARIANT = VARIANT値. COMPUTE CBLITEMPTR = FUNCTION ADDR(CBLITEM). CALL 'CBLSETCBLITEM' USING BY VALUE ARG1 BY REFERENCE PRMVARIANT PRMSETCBLITEM.
CBLPUTPROPERTYまたはCBLMETHODCALLサービスルーチンでCOBOLのデータ項目を設定するため,VARIANT値に変換するサービスルーチンです。
CALL 'CBLSETVARIANT' USING BY VALUE 引数1 BY REFERENCE 引数2 引数3.
01 引数2 USAGE ADDRESS.
01 引数3. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. … 1. 02 データ名1 PIC 9(9) USAGE COMP. … 2. 02 データ名2 USAGE ADDRESS. … 3.
DATA DIVISION. WORKING-STORAGE SECTION. 01 ARG1 PIC 9(9) USAGE COMP VALUE ZERO. 01 PRMVARIANT USAGE ADDRESS. 01 PRMSETVARIANT. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO. 02 CBLTYPE PIC 9(9) USAGE COMP VALUE 8. 02 CBLITEMPTR USAGE ADDRESS. 01 CBLITEM. 02 ITEMLENG PIC 9(9) USAGE COMP VALUE 15. 02 ITEMSTRING PIC X(15) VALUE 'OLE2 Automation'. : PROCEDURE DIVISION. COMPUTE PRMVARIANT = ZERO. COMPUTE CBLITEMPTR = FUNCTION ADDR(CBLITEM). CALL 'CBLSETVARIANT' USING BY VALUE ARG1 BY REFERENCE PRMVARIANT PRMSETVARIANT.
OLE2を終了させるサービスルーチンです。このサービスルーチンでは,CBLCREATEOBJやCBLGETOBJが生成したOLEオブジェクトや取得したOLEオブジェクトを終了できません。その場合は,このサービスルーチンを発行する前に,CloseやQuitなどOLE2オートメーションサーバ機能の終了メソッドを呼び出しておいてください。
また,このサービスルーチンを発行したあと,次のサービスルーチンを呼び出してはなりません。
CALL 'CBLOLE2UNINIT' USING BY VALUE 引数1 BY REFERENCE 引数2.
01 引数2. 02 FILLER PIC 9(9) USAGE COMP VALUE ZERO.
OLE2オートメーションクライアント機能で使用するサービスルーチンが正常終了した場合,RETURN-CODE特殊レジスタに0が戻されます。
サービスルーチンが異常終了した場合は,次のエラーコード値のどれかが戻されます。
表C-2 エラーコード値
エラーコード値 | エラーの内容 |
---|---|
10 | 引数の値がNULLである。 |
13 | ファイル名の拡張子がない。 |
14 | プログラムIDが異なっている。 |
15 | ファイル名,クラス名の指定が共にない。 |
18 | Dispatchポインタが取得できなかった。 |
19 | 数値を構成する要素に誤りがある。 |
20 | BSTR文字列を確保できなかった。 |
21 | 未サポートのVARIANTタイプが設定されている。 |
22 | 文字列を格納する領域が,文字列長よりも長い。 |
23 | 不当な日付が指定されている。 |
24 | クラス名の指定がない。 |
25 | サーバオブジェクトポインタが指定されていない。 |
26 | OLEプロパティの指定がない。 |
27 | OLEメソッドの指定がない |
28 | COBOLデータ項目の指定がない。 |
29 | OLEプロパティに引数が指定されている。 |
30 | 引数VARIANTテーブルの指定がない。 |
31 | VARIANT値とCOBOLデータ項目の型が不一致である。 |
32 | 設定できないVARIANT値が指定されている。 |
33 | 指定されたキーがオープンできない。 |
34 | 指定されたキーの値が取得できない。 |
35 | 指定されたキーがクローズできない。 |
その他の番号 | OLEのシステムエラーが発生した。10進数のエラーコード値から,OLE関連のマニュアルでエラー状態を調べて対策する。 |
OLE2オートメーションクライアント機能全般に関する注意事項について説明します。
All Rights Reserved. Copyright (C) 2013, 2016, Hitachi, Ltd.
All Rights Reserved. Copyright (C) 2002, 2011, Microsoft Corporation.