2.28.2.16 タイプ IDispatch のプロパティ

ActiveXコンポーネントのタイプ・ライブラリを構築するやり方によっては、プロパティをVisual LANSA側に返すとき、そのタイプが静的に決まらず、IDispatchタイプになっていることがあります。したがってオブジェクトの具体的なプロパティ、イベント、メソッドは、実行時にしか解決できません。このようなオブジェクトとしては、例えばExcelのWorksheetオブジェクトがあります。

オブジェクトのタイプが既知ではないため、そのプロパティ、イベント、メソッドを直接使う次のようなステートメントは、「Component IDispatch does not contain property/method/event X」というエラーになります。例えば、以下のステートメントでエラーが発生します。

invoke method(#va_excel.worksheets.item<'blad2'>.activate)

 

このようなIDispatchインターフェース型オブジェクトを使うためには、オブジェクト定義の際に動的参照である旨を指定しておき、そのプロパティ、メソッド、イベントを使う箇所では参照を明示的に記述する必要があります。

例えばExcelのワークシートをアクティブ化する場合、オブジェクトの定義は次のように記述します。

Define_Com Class(#VA_EXCEL.Worksheet) Name(#WorkSheet) Reference(*Dynamic)

 

コード中では次のように明示的に参照を設定します。

Set_Ref Com(#Worksheet) To(*Dynamic #Excel.Worksheets.Item<'blad2'>)

 

すると次のようにActiveteメソッドを使えるようになります。

Invoke Method(#Worksheet.Activate)

 

コンポーネントのヘルプ (ダブルクリック) には、オブジェクトのタイプが IDispatch インターフェースであることが表示されます。実際のタイプについては、ActiveXコントロールの付属文書を参照してください。