Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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

Image RemovedImage Added

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

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

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

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

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

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

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

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

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

...

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

     Invoke Method(#Worksheet.Activate)

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