Microsoft DirectX 8.0 (Visual Basic)

IUnknown データ型

IUnknown インターフェイスは、すべての COM オブジェクトにより公開される。C++ 開発者はこのインターフェイスを使用して、オブジェクトの機能にアクセスしたりオブジェクトの有効期間を管理できる。Microsoft® Visual Basic® 開発者は、ほとんど IUnknown を利用する必要はない。ただし、Visual Basic では、オブジェクトの IUnknown インターフェイスは IUnknown データ型で表される。

Microsoft DirectX® 8.0 のいくつかの Visual Basic メソッドは、Unknown と宣言された戻り値またはパラメータを備えている。これらの値の型は定義されておらず、IUnknown 型または別のオブジェクト型になる。DirectX 8.0 では、次の 2 つの場合に Unknown 宣言が使用される。

変数 IUnknown を使用する場合、オブジェクトのメソッドまたは C++ で使用される QueryInterfaceAddref、および Release の各メソッドには直接アクセスできない。変数 IUnknown にオブジェクト参照がある場合、そのオブジェクトのメソッドを使用するには、その変数を適切に宣言されたクラス変数に設定する必要がある。

次のサンプル コードは、IUnknown データ型を使用する方法を示している。

'dmSeg は DirectMusicSegment8 オブジェクトである。
'dmPerf は DirectMusicPerformance8 オブジェクトである。

Dim config as IUnknown
Dim audioPath As DirectMusicAudioPath

Set config = dmSeg.GetAudioPathConfig
Set audioPath = dmPerf.CreateAudioPath(config)

DirectMusicSegment8.GetAudioPathConfig が返す値は、クラスでは表されない構成オブジェクトへの参照である。次に、このオブジェクト参照をほかのメソッド (この場合、DirectMusicPerformance8.CreateAudioPath) に渡す。

次に示す IUnknown データ型の使用方法は間違っている。

'objDiDev は DirectInputDevice8 オブジェクトである。

Dim unk As IUnknown
Set unk = objDiDev
NumItems = unk.GetDeviceData(diDeviceData,0) 'Incorrect!

DirectInputDevice8.GetDeviceData メソッドを呼び出そうとすると、"method not found" エラーが発生する。