カクタスソフトウェア
カクタスソフトウェア
サウンド MIDI マルチメディア アプリケーション

IMediaObjectを作成する

REFCLSID rclsid;    // 作成したいDMOのCLSID

IMediaObject        *pObject = NULL;
IMediaObjectInPlace *pObjectInPlace = NULL;

HRESULT hr;
hr = CoCreateInstance(rclsid, NULL, CLSCTX_INPROC, IID_IMediaObject, (void **)&pObject);
if (FAILED(hr))     return;

pObject->QueryInterface(IID_IMediaObjectInPlace, (void**)&pObjectInPlace);

作成したいDMOのCLSIDを引数にCoCreateInstance関数を実行します。IMediaObjectを作成するときはIIDにIID_IMediaObjectを指定します。

作成したIMediaObjectからQueryInterface関数を用いIMediaObjectInPlaceインターフェースを取得します。QueryInterfaceがE_NOINTERFACEを戻したときは取得しようとしたインターフェースが支援されていないことを意味します。

Guid rclsid;    // 作成したいDMOのCLSID

Type comType = Type.GetTypeFromCLSID(rclsid);
object comObj = Activator.CreateInstance(comType);

IMediaObject mediaObj = (IMediaObject)comObj; comObj = null;
IMediaObjectInPlace mediaObjInPlace = mediaObj as IMediaObjectInPlace;

C#ではCOMオブジェクトを作成するのにActivatorクラスのCreateInstance関数を用います。引数としてTypeを取るので、TypeクラスのGetTypeFromCLSID関数を用いてCLSIDからTypeを取得しておきます。COMオブジェクトが作成されたら目的の属性(ここではIMediaObjectインターフェース)にキャストします。

mediaObjがさらにIMediaObjectInPlaceインターフェースを支援している場合、asを用いてIMediaObjectInPlaceにキャストすることができます。この操作は、C/C++環境で言えば、QueryInterface関数を用いてインターフェースを取得することに相当します。mediaObjInPlaceに非nullの値が得られれば、IMediaObjectInPlaceインターフェースを利用することができます。mediaObjInPlaceがnullのときは、IMediaObjectInPlaceインターフェースは支援されません。

ドキュメントの先頭へ

カクタスソフトウェア 技術協力 資料室 資料室の広場 SourceForge.jp お問い合わせ