Win32 API 日本語リファレンス
ホームMedia.WindowsMediaFormat › IWMMutualExclusion2

IWMMutualExclusion2

COM
IID0302b57d-89d1-4ba2-85c9-166f2c53eb91継承元IWMMutualExclusion自前メソッド開始 vtbl8

公式ドキュメント

IWMMutualExclusion2 インターフェイスは、相互排他オブジェクトに対する高度な構成機能を提供します。このインターフェイスは、複数言語と高度な相互排他の両方をサポートします。IWMMutualExclusion2 インターフェイスは、作成される相互排他オブジェクトごとに 1 つ作成されます。IWMMutualExclusion2 インターフェイスへのポインターを取得するには、IWMProfile::CreateNewMutualExclusion が返す IWMMutualExclusion インターフェイスの QueryInterface メソッドを呼び出します。

メソッド 10

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 8 HRESULT GetName(LPWSTR pwszName, WORD* pcchName)

GetName メソッドは、現在の相互排他オブジェクトの名前を取得します。相互排他オブジェクトに名前が付くのは、IWMMutualExclusion2::SetName メソッドを使用して名前が割り当てられている場合のみです。

pwszNameLPWSTRout相互排他オブジェクトの名前を格納するワイド文字の null 終端文字列へのポインター。名前の長さを取得するには NULL を渡します。
pcchNameWORD*inout入力時は、pwszName 配列の長さをワイド文字数(2 バイト)で格納する変数へのポインター。出力時は、メソッドが成功した場合、この変数に終端の null 文字を含む名前の長さが格納されます。

戻り値

このメソッドは HRESULT を返します。有効な値には、次の表に示すものが含まれますが、これらに限定されません。

Return code Description
S_OK
メソッドは成功しました。
E_INVALIDARG
pcchName パラメーターが NULL です。

解説(Remarks)

pwszNameNULL を渡すことで、pcchName に名前の正しいサイズを取得し、その後、適切なサイズの文字列を指定してこのメソッドを再度呼び出すことができます。この場合、pcchName として渡す値は無関係です。この値は名前の正しい長さで置き換えられます。

pwszName としてアドレスを渡し、pcchName に指定した長さが名前の格納に必要な文字数より短い場合、GetNamepwszName を無視し、正しい文字数を pcchName に返します。この場合でも、メソッドは S_OK を返します。

vtbl 9 HRESULT SetName(LPWSTR pwszName)

SetName メソッドは、相互排他オブジェクトに名前を割り当てます。

pwszNameLPWSTRin割り当てる名前を格納するワイド文字の null 終端文字列へのポインター。

戻り値

このメソッドは HRESULT を返します。有効な値には、次の表に示すものが含まれますが、これらに限定されません。

Return code Description
S_OK
メソッドは成功しました。
E_OUTOFMEMORY
メソッドは名前を保持するメモリを割り当てられませんでした。
vtbl 10 HRESULT GetRecordCount(WORD* pwRecordCount)

GetRecordCount メソッドは、相互排他オブジェクトに存在するレコードの数を取得します。

pwRecordCountWORD*out相互排他オブジェクトに存在するレコードの数を格納する WORD へのポインター。

戻り値

このメソッドは HRESULT を返します。有効な値には、次の表に示すものが含まれますが、これらに限定されません。

Return code Description
S_OK
メソッドは成功しました。
E_INVALIDARG
pwRecordCount パラメーターが NULL です。

解説(Remarks)

レコード番号は順番に割り当てられます。

vtbl 11 HRESULT AddRecord()

AddRecord メソッドは、相互排他オブジェクトにレコードを追加します。

戻り値

このメソッドは HRESULT を返します。有効な値には、次の表に示すものが含まれますが、これらに限定されません。

Return code Description
S_OK
メソッドは成功しました。
E_OUTOFMEMORY
メソッドは新しいレコード用のメモリを割り当てられませんでした。
E_FAIL
この相互排他オブジェクトのレコードのコレクションに新しいレコードを追加する際に問題が発生しました。

解説(Remarks)

他のメソッドで使用されるレコード番号は、レコードに順番に割り当てられます。

vtbl 12 HRESULT RemoveRecord(WORD wRecordNumber)

RemoveRecord メソッドは、相互排他オブジェクトからレコードを削除します。

wRecordNumberWORDin削除するレコードの番号を格納する WORD

戻り値

このメソッドは HRESULT を返します。有効な値には、次の表に示すものが含まれますが、これらに限定されません。

Return code Description
S_OK
メソッドは成功しました。
E_INVALIDARG
wRecordNumber パラメーターに有効なレコード番号が含まれていません。
E_FAIL
メソッドは、原因不明の理由でレコードにアクセスできません。

解説(Remarks)

レコードを削除すると、復元することはできません。

vtbl 13 HRESULT GetRecordName(WORD wRecordNumber, LPWSTR pwszRecordName, WORD* pcchRecordName)

GetRecordName メソッドは、指定したレコードの名前を取得します。レコードに名前が付くのは、IWMMutualExclusion2::SetRecordName メソッドを使用して名前が割り当てられている場合のみです。

wRecordNumberWORDin名前を取得するレコードの番号を格納する WORD
pwszRecordNameLPWSTRoutレコード名を格納するワイド文字の null 終端文字列へのポインター。名前の長さを取得するには NULL を渡します。
pcchRecordNameWORD*inout入力時は、pwszRecordName 配列の長さをワイド文字数(2 バイト)で格納する変数へのポインター。出力時は、メソッドが成功した場合、この変数に終端の null 文字を含む名前の長さが格納されます。ただし、pwszRecordName として NULL を渡した場合、出力時にこの変数には必要な長さが設定されます。

戻り値

このメソッドは HRESULT を返します。有効な値には、次の表に示すものが含まれますが、これらに限定されません。

Return code Description
S_OK
メソッドは成功しました。
E_INVALIDARG
wRecordNumber に有効なレコード番号が含まれていません。

または

pcchRecordNameNULL です。

E_FAIL
メソッドは、原因不明の理由でレコードにアクセスできません。

解説(Remarks)

取得するレコード名ごとに、GetRecordName を 2 回呼び出す必要があります。1 回目の呼び出しでは、pwszRecordName として NULL を渡します。戻り時に、pcchRecordName が指す値には、終端の null 文字を含めてレコード名の格納に必要なワイド文字数が設定されます。その後、文字列に必要な量のメモリを割り当て、2 回目の呼び出しでそのポインターを pwszRecordName として渡すことができます。

レコードには、作成された順に番号が順番に割り当てられます。

vtbl 14 HRESULT SetRecordName(WORD wRecordNumber, LPWSTR pwszRecordName)

SetRecordName メソッドは、レコードに名前を割り当てます。後でレコードを容易に識別できるように、すべてのレコードに名前を割り当てる必要があります。

wRecordNumberWORDin名前を割り当てるレコード番号を格納する WORD
pwszRecordNameLPWSTRinレコードに割り当てる名前を格納するワイド文字の null 終端文字列へのポインター。レコード名は 256 ワイド文字までに制限されます。

戻り値

このメソッドは HRESULT を返します。有効な値には、次の表に示すものが含まれますが、これらに限定されません。

Return code Description
S_OK
メソッドは成功しました。
E_OUTOFMEMORY
メソッドは名前用のメモリを割り当てられませんでした。

解説(Remarks)

pwszRecordName として空の文字列を渡した場合、メソッドは S_OK を返しますが、何も行われません。

vtbl 15 HRESULT GetStreamsForRecord(WORD wRecordNumber, WORD* pwStreamNumArray, WORD* pcStreams)

GetStreamsForRecord メソッドは、レコードに存在するストリームのリストを取得します。

wRecordNumberWORDinストリームを取得するレコード番号を格納する WORD
pwStreamNumArrayWORD*outストリーム番号を受け取る配列へのポインター。NULL の場合、GetStreamsForRecord はストリーム数を pcStreams に返します。
pcStreamsWORD*inoutレコード内のストリーム数を格納する WORD へのポインター。

戻り値

このメソッドは HRESULT を返します。有効な値には、次の表に示すものが含まれますが、これらに限定されません。

Return code Description
S_OK
メソッドは成功しました。
E_INVALIDARG
pcStreamsNULL です。

または

wRecordNumber に有効なレコード番号が含まれていません。

ASF_E_BUFFERTOOSMALL
pcStreams として渡された値が、レコード内のストリーム数より小さいです。このエラーコードで終了する際、pcStreams の値には正しいストリーム数が格納されます。
E_FAIL
メソッドは、原因不明の理由でレコードにアクセスできません。

解説(Remarks)

GetStreamsForRecord は 2 回呼び出す必要があります。1 回目の呼び出しでは、pwStreamNumArray として NULL を渡します。戻り時に、pcStreams の値にストリーム数が設定されます。その後、配列の格納に必要な量のメモリを割り当て、2 回目の呼び出しでそのポインターを pwStreamNumArray として渡すことができます。

すべてのストリームを格納するのに十分な大きさでない配列を渡した場合、エラーコード ASF_E_BUFFERTOOSMALL が返されます。このエラーコードを返す際も、メソッドは pcStreams の値に正しいストリーム数を設定します。

vtbl 16 HRESULT AddStreamForRecord(WORD wRecordNumber, WORD wStreamNumber)

AddStreamForRecord メソッドは、IWMMutualExclusion2::AddRecord で作成したレコードにストリームを追加します。

wRecordNumberWORDinストリームを追加するレコードの番号を格納する WORD
wStreamNumberWORDin追加するストリーム番号を格納する WORD

戻り値

このメソッドは HRESULT を返します。有効な値には、次の表に示すものが含まれますが、これらに限定されません。

Return code Description
S_OK
メソッドは成功しました。
E_OUTOFMEMORY
メソッドは新しいストリーム番号用のメモリを割り当てられません。
E_INVALIDARG
wRecordNumber に無効なレコード番号が含まれています。
E_FAIL
メソッドは、原因不明の理由でレコードにアクセスできません。

解説(Remarks)

レコード番号は順番に割り当てられます。

vtbl 17 HRESULT RemoveStreamForRecord(WORD wRecordNumber, WORD wStreamNumber)

RemoveStreamForRecord メソッドは、レコードのリストからストリームを削除します。

wRecordNumberWORDinストリームを削除するレコード番号を格納する WORD
wStreamNumberWORDinレコードから削除するストリーム番号を格納する WORD

戻り値

このメソッドは HRESULT を返します。有効な値には、次の表に示すものが含まれますが、これらに限定されません。

Return code Description
S_OK
メソッドは成功しました。
NS_E_NOMATCHING_ELEMENT
wStreamNumber で指定されたストリームが、wRecordNumber で指定されたレコードに存在しません。
E_INVALIDARG
wRecordNumber に有効なレコード番号が含まれていません。
E_FAIL
メソッドは、原因不明の理由でレコードにアクセスできません。

解説(Remarks)

どちらの引数にも NULL を渡さないでください。例外エラーが発生します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IWMMutualExclusion2 "{0302B57D-89D1-4BA2-85C9-166F2C53EB91}"
#usecom global IWMMutualExclusion2 IID_IWMMutualExclusion2 "{}"
#comfunc global IWMMutualExclusion2_GetName                8 var,var
#comfunc global IWMMutualExclusion2_SetName                9 wstr
#comfunc global IWMMutualExclusion2_GetRecordCount         10 var
#comfunc global IWMMutualExclusion2_AddRecord              11
#comfunc global IWMMutualExclusion2_RemoveRecord           12 int
#comfunc global IWMMutualExclusion2_GetRecordName          13 int,var,var
#comfunc global IWMMutualExclusion2_SetRecordName          14 int,wstr
#comfunc global IWMMutualExclusion2_GetStreamsForRecord    15 int,var,var
#comfunc global IWMMutualExclusion2_AddStreamForRecord     16 int,int
#comfunc global IWMMutualExclusion2_RemoveStreamForRecord  17 int,int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。