IConnector
COM公式ドキュメント
IConnector インターフェイスは、コンポーネント間の接続点を表します。
メソッド 8
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
GetType メソッドは、このコネクタの種類を取得します。
| pType | ConnectorType* | out | コネクタの種類がメソッドによって書き込まれる変数へのポインタです。コネクタの種類は、次の ConnectorType 列挙定数のいずれかです。 Unknown_Connector Physical_Internal Physical_External Software_IO Software_Fixed Network |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合、戻り値には次の表に示す値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| ポインタ pType が NULL です。 |
解説(Remarks)
コネクタは、カーネルストリーミング (KS) の用語における「ピン」に相当します。KS ピンとコネクタの対応関係は次のとおりです。
- KS ピンの通信種別が KSPIN_COMMUNICATION_SINK、KSPIN_COMMUNICATION_SOURCE、または KSPIN_COMMUNICATION_BOTH の場合、コネクタの種類は Software_IO です。
- それ以外で、ピンが同一のオーディオアダプタ内、または異なるオーディオアダプタ間にある 2 つの KS フィルタ (デバイス) 間の物理的接続の一部である場合、コネクタの種類は Software_Fixed です。
- それ以外で、KS ピンのカテゴリが KSNODETYPE_SPEAKER、KSNODETYPE_MICROPHONE、KSNODETYPE_LINE_CONNECTOR、または KSNODETYPE_SPDIF_INTERFACE の場合、コネクタの種類は Physical_External です。
- それ以外で、上記のいずれの条件にも該当しないピンの場合、コネクタの種類は Physical_Internal です。
GetType メソッドを呼び出すコード例については、Device Topologies にある SelectCaptureDevice 関数の実装を参照してください。
GetDataFlow メソッドは、このコネクタを通過するデータフローの方向を取得します。
| pFlow | DataFlow* | out | データフローの方向がメソッドによって書き込まれる変数へのポインタです。方向は、次の DataFlow 列挙値のいずれかです。 In Out コネクタを介してデバイスにデータが流れ込む場合、データフローの方向は In です。それ以外の場合、データフローの方向は Out です。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合、戻り値には次の表に示す値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| ポインタ pFlow が NULL です。 |
解説(Remarks)
このメソッドを呼び出すコード例については、Device Topologies にある SelectCaptureDevice 関数の実装を参照してください。
ConnectTo メソッドは、このコネクタを別のデバイストポロジオブジェクト内のコネクタに接続します。
| pConnectTo | IConnector* | in | もう一方のコネクタです。このパラメータは、別のデバイストポロジ内のコネクタを表すコネクタオブジェクトの IConnector インターフェイスを指します。呼び出し元は、IConnector インターフェイスへのカウント参照が不要になった時点で、その参照を解放する責任があります。ConnectTo メソッドは、このインターフェイスに対する独自の参照を取得します。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合、戻り値には次の表に示す値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| ポインタ pConnectTo が NULL です。 | |
| 現在のコネクタと、pConnectTo が指すリモートコネクタのデータフローの方向が同一です。トポロジ内で有効な接続を作成するには、データフローの方向が「In」のコネクタを、データフローの方向が「Out」の別のコネクタに接続する必要があります。コネクタのデータフローを確認するには、IConnector::GetDataFlow を呼び出します。 | |
| pConnectTo が指すオブジェクトが有効なコネクタオブジェクトではありません。 | |
|
2 つのコネクタのうちの一方が、すでに別のコネクタに接続されています。このマクロの詳細については、Windows SDK のドキュメントを参照してください。 |
Disconnect メソッドは、このコネクタを別のコネクタから切断します。
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合、戻り値には次の表に示す値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| このコネクタはすでに切断されています。 | |
|
永続的な接続は切断できません。このマクロの詳細については、Windows SDK のドキュメントを参照してください。 |
IsConnected メソッドは、このコネクタが別のコネクタに接続されているかどうかを示します。
| pbConnected | BOOL* | out | 接続状態がメソッドによって書き込まれる BOOL 変数へのポインタです。状態が TRUE の場合、このコネクタは別のコネクタに接続されています。FALSE の場合、このコネクタは未接続です。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合、戻り値には次の表に示す値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| ポインタ pbConnected が NULL です。 |
解説(Remarks)
IsConnected メソッドを呼び出すコード例については、Device Topologies にある SelectCaptureDevice 関数の実装を参照してください。
GetConnectedTo メソッドは、このコネクタが接続されているコネクタを取得します。
| ppConTo | IConnector** | out | もう一方のコネクタオブジェクトの IConnector インターフェイスのアドレスがメソッドによって書き込まれるポインタ変数へのポインタです。このメソッドを通じて、呼び出し元はインターフェイスへのカウント参照を取得します。呼び出し元は、インターフェイスが不要になった時点で、そのインターフェイスの Release メソッドを呼び出して解放する責任があります。GetConnectedTo の呼び出しが失敗した場合、*ppConTo は NULL になります。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合、戻り値には次の表に示す値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| ポインタ ppConTo が NULL です。 | |
| このコネクタは接続されていないか、接続の反対側が別のデバイストポロジではありません (例: Software_IO 接続)。 | |
|
接続の反対側にあるデバイストポロジがアクティブではありません (つまり、デバイスの状態が DEVICE_STATE_ACTIVE ではありません)。 |
解説(Remarks)
このメソッドを呼び出すコード例については、Device Topologies にある GetHardwareDeviceTopology 関数および SelectCaptureDevice 関数の実装を参照してください。
Software_IO 接続の詳細については、ConnectorType Enumeration を参照してください。HRESULT_FROM_WIN32 マクロの詳細については、Windows SDK のドキュメントを参照してください。DEVICE_STATE_NOTPRESENT デバイス状態の詳細については、DEVICE_STATE_XXX Constants を参照してください。
GetConnectorIdConnectedTo メソッドは、このコネクタが接続されているコネクタ (存在する場合) のグローバル ID を取得します。
| ppwstrConnectorId | LPWSTR* | out | もう一方のコネクタのグローバル ID を含む、null 終端されたワイド文字列のアドレスがメソッドによって書き込まれる文字列ポインタへのポインタです。メソッドは文字列用のストレージを割り当てます。呼び出し元は、文字列が不要になった時点で、CoTaskMemFree 関数を呼び出してストレージを解放する責任があります。GetConnectorIdConnectedTo の呼び出しが失敗した場合、*ppwstrConnectorId は NULL になります。CoTaskMemFree の詳細については、Windows SDK のドキュメントを参照してください。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合、戻り値には次の表に示す値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| このコネクタは接続されていないか、接続の反対側が別のデバイストポロジではありません (例: Software_IO 接続)。 | |
| パラメータ ppwstrConnectorId が NULL です。 | |
| メモリ不足です。 |
解説(Remarks)
グローバル ID は、システム内のすべてのデバイストポロジにあるすべてのパートの中で、あるパートを一意に識別する文字列です。クライアントはこの文字列を不透明なものとして扱う必要があります。つまり、クライアントはパートに関する情報を得るためにこの文字列の内容を解析しようとすべきではありません。その理由は、文字列の形式が未定義であり、DeviceTopology API の実装ごとに変わる可能性があるためです。
GetDeviceIdConnectedTo メソッドは、このコネクタが接続されているオーディオデバイス (存在する場合) のデバイス識別子を取得します。
| ppwstrDeviceId | LPWSTR* | out | 接続先デバイスのデバイス識別子を含む、null 終端されたワイド文字列のアドレスがメソッドによって書き込まれる文字列ポインタへのポインタです。メソッドは文字列用のストレージを割り当てます。呼び出し元は、文字列が不要になった時点で、CoTaskMemFree 関数を呼び出してストレージを解放する責任があります。GetDeviceIdConnectedTo の呼び出しが失敗した場合、*ppwstrDeviceId は NULL になります。CoTaskMemFree の詳細については、Windows SDK のドキュメントを参照してください。 |
戻り値
メソッドが成功した場合は S_OK を返します。失敗した場合、戻り値には次の表に示す値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| ポインタ ppwstrDeviceId が NULL です。 | |
| このコネクタは接続されていないか、接続の反対側が別のデバイストポロジではありません (例: Software_IO 接続)。 | |
|
メモリ不足です。 |
解説(Remarks)
このメソッドから取得したデバイス識別子は、IMMDeviceEnumerator::GetDevice メソッドの入力パラメータとして使用できます。
このメソッドは、次の一連のメソッド呼び出しと機能的には同等ですが、より効率的です。
- IConnector::GetConnectedTo メソッドを呼び出して、「接続先」コネクタの IConnector インターフェイスを取得します。
- IConnector::QueryInterface メソッド (パラメータ iid を REFIID IID_IPart に設定) を呼び出して、「接続先」コネクタの IPart インターフェイスを取得します。
- IPart::GetTopologyObject メソッドを呼び出して、「接続先」デバイス (「接続先」コネクタを含むデバイス) の IDeviceTopology インターフェイスを取得します。
- IDeviceTopology::GetDeviceId メソッドを呼び出して、「接続先」デバイスのデバイス ID を取得します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IConnector "{9C2C4058-23F5-41DE-877A-DF3AF236A09E}" #usecom global IConnector IID_IConnector "{}" #comfunc global IConnector_GetType 3 var #comfunc global IConnector_GetDataFlow 4 var #comfunc global IConnector_ConnectTo 5 sptr #comfunc global IConnector_Disconnect 6 #comfunc global IConnector_IsConnected 7 var #comfunc global IConnector_GetConnectedTo 8 sptr #comfunc global IConnector_GetConnectorIdConnectedTo 9 var #comfunc global IConnector_GetDeviceIdConnectedTo 10 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IConnector "{9C2C4058-23F5-41DE-877A-DF3AF236A09E}" #usecom global IConnector IID_IConnector "{}" #comfunc global IConnector_GetType 3 sptr #comfunc global IConnector_GetDataFlow 4 sptr #comfunc global IConnector_ConnectTo 5 sptr #comfunc global IConnector_Disconnect 6 #comfunc global IConnector_IsConnected 7 sptr #comfunc global IConnector_GetConnectedTo 8 sptr #comfunc global IConnector_GetConnectorIdConnectedTo 9 sptr #comfunc global IConnector_GetDeviceIdConnectedTo 10 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。