インタフェースのデザイン考察

この節では,Fortran COM サーバーをデザインする時に考察しなければならない情報を提供しています。以下のトピックがあります。

メソッドとプロパティのデータ型

COM は,COM メソッドとプロパティで使用するデータ型に制限を設けています。制限を設けている理由は,COM が引数をスレッド,手続,およびマシン間で渡すことができるようにするためです。これは,呼び出し側と同じアドレス空間で常に動作する DLL のような古い技術には存在しない問題を引き起こします。

COM は,オートメーション互換データ型と呼ばれるデータ型の組を定義しています。これらは,オートメーションとデュアル・インタフェースで使われるデータ型のみです。これらのデータ型に COM インタフェースを制限することの利点が 2 つあります。

サーバーをオートメーション互換データ型に制限するには,以下のようにします。

  1. 「Interface property」ページの「Use only Automation data types」を選択します。デュアル・インタフェースを定義する場合,これは自動的に設定されます。

  2. 「Argument property」ページの「Fortran data type」と「Interface data type」の以下の組み合わせのみを使用します。

    Visual Fortran は,オートメーション互換データ型として,「Currency」,「Decimal」,または「User Defined Type」をサポートしていないことに注意してください。

Fortran Date TypeInterface Data Type
INTEGER(1)unsigned char
INTEGER(2)short
INTEGER(4)long
SCODE
Int
INTEGER(INT_PTR_KIND())IUnknown*
IDispatch*
REAL(4)float
REAL(8)double
DATE
LOGICAL(2)VARIANT_BOOL
LOGICAL(4)long
CHARACTER(1)unsigned char
CHARACTER(*)BSTR
BYTEunsigned char
TYPE(VARIANT)VARIANT (上記の型または SafeArray の 1 つを含みます)

自分のインタフェースをオートメーション互換データ型に制限しないとした場合,次のアプローチは,Interface Description Language (IDL) に記述できるデータ型に対するインタフェースを制限させます。

Fortran COM Server Wizard は,自動的にサーバーの記述から IDL ファイルを生成します。MIDL コンパイラは,IDL ファイルをタイプ・ライブラリーにコンパイルします。MIDL はまた,自動的にスレッド,手続,およびマシン間の引数渡しの処理に必要なコードを生成します。しかしながら,C コンパイラではこのオプションを使用しなければならないことに注意してください。詳細は,「COM サーバーの詳細説明」の「マーシャリング,プロキシ,およびスタブ」を参照してください。

自分のインタフェースを IDL データ型に制限しないとした場合,残りのオプションには以下のものがあります。

COM 状態コード:HRESULT

各関数は,HRESULT と呼ばれる 32 ビット COM 状態コードを返します。HRESULT は,以下の欄に分割されます。

典型的な HRESULT エラー値は,0x80070057 のような値です。最初の 16 進数 8 は,ビット 31 がセットされ,これがエラー値であることを示しています。ビット 16 ~ 27 は,値 7 です。これは,ファシリティ FACILITY_WIN32 を示しています。下位ワードは,値 0057 です。これは,E_INVALIDARG というエラーを示す固有コードです。

システムの HRESULT に対応するテキスト記述を参照するには,「Compaq Visual Fortran」プログラム・フォルダの「Error Lookup」ツールを使用します。たとえば,値 0x80070057 を入力すると,以下に示すようにテキスト・メッセージ「The parameter is incorrect」が取り出されます。

Visual Fortran CD-ROM の \VC\INCLUDE ディレクトリの WINERROR.HHRESULT 値を検索することもできます。

COM サーバーはまた,ErrorInfo オブジェクトを通して拡張エラー情報を提供することもできます。詳細は,「COM ErrorInfo オブジェクトに対するサポートの追加」を参照してください。

Visual Basic と Visual C++ クライアントの注意事項

Visual Basic からオブジェクトを使用するためには,Visual Basic プロジェクトにオブジェクトの「参照 (Reference)」を追加しなければなりません。「プロジェクト」メニューの「参照設定」を選択して,登録されているオブジェクトの一覧を表示します。一覧からオブジェクトを選択して,Visual Basic に使用するオブジェクトを伝えます。

Visual Basic クライアントが使用するサーバーを書く時に注意しなければならない点を説明します。

Visual C++ からオブジェクトを使用するには,#import 指示文を使用します。#import 指示文の構文は,以下のようになります。

	#import "filename" [attributes]
	#import <filename> [attributes]

filename は,タイプ・ライブラリー情報を含むファイルの名前です。指示文は,C++ クラスの組としてソース・ファイルに対してタイプ・ライブラリーを利用可能にする情報を作成します。詳細は,Visual C++ マニュアルを参照してください。