IMcastAddressAllocation
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
IMcastAddressAllocation は、マルチキャストアドレス割り当てのためのメインインターフェイスです。アプリケーションはこのインターフェイスに対して COM の CoCreateInstance 関数を呼び出し、マルチキャストクライアントインターフェイスオブジェクトを作成します。
解説(Remarks)
マルチキャスト COM インターフェイスは、マルチキャストアドレスのリースを割り当て、更新し、解放するためのネットワーク機能へのアクセスを提供します。これらは一連の関数定義とデータ構造定義をカプセル化します。COM インターフェイスにより、プログラマーはこれらのデータ構造を理解し操作するという負担から解放されます。さらに、TAPI 3 自体が COM ベースであるため、これらのインターフェイスは TAPI 3 が提供する他の機能と一貫した形でマルチキャストアドレス割り当てを利用できるようにします。Visual Basic、Java、またはスクリプト言語で記述されたアプリケーションは、これらの COM インターフェイスを使用する必要があります。通常は Windows API に直接アクセスできないためです。
さらに、このコンポーネントは、非マルチキャスト環境向けにローカルアドレス割り当てのシームレスで透過的なサポートを提供します。DWORD レジストリ値 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\MCAST\LocalAllocation をゼロ以外の値に設定すると、すべてのマルチキャストアドレスの割り当てにローカルマシン上で行われる乱数生成を使用することを指定します。これにより、マルチキャストアドレス割り当てサーバーが存在しないネットワーク上でも、マルチキャストアドレス割り当てサーバーが存在するネットワーク上と同じようにアプリケーションが動作できるようになります。このレジストリ値がゼロに設定されているか存在しない場合、このコンポーネントは本仕様の残りの部分で説明するとおり通常どおり動作します。なお、このレジストリキーがゼロ以外の値に設定されていない限り、ローカルアドレス割り当ては決して使用されません。ローカルアドレス割り当ては、一時的にアクセスできないマルチキャストアドレス割り当てサーバーのフォールバック機構ではありません。
マルチキャストアドレス割り当ては現在 IETF ワーキンググループで検討中の課題です。最新情報にアクセスするには、任意のインターネット検索エンジンで「Internet draft」および「MDHCP」または「MADCAP」を検索してください。MADCAP(以前は MDHCP と呼ばれていました)に加えて、提案されているアーキテクチャには、ドメインまたは AS 内でのサーバー間協調のためのプロトコルや、ドメイン間協調のためのプロトコルが含まれます。このアーキテクチャは現在も進化を続けていますが、クライアントがこの仕組みの詳細に関与する必要はありません。
このコンポーネントは現在、IP バージョン 4 のアドレスのみをサポートしています。
メソッド 7
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
get_Scopes メソッドは、利用可能な IMcast スコープのコレクションを作成します。このメソッドは EnumerateScopes に似ていますが、Visual Basic などのスクリプト言語で使用されます。
| pVariant | VARIANT* | out | IMcastScope インターフェイスポインターの ITCollection を受け取る VARIANT へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| 呼び出し元が無効なポインター引数を渡しました。 | |
| 利用可能なスコープがありません。 | |
| 必要なオブジェクトを作成するのに十分なメモリがありません。 |
解説(Remarks)
TAPI は IMcastAddressAllocation::get_Scopes が返す IMcastScope インターフェイスに対して AddRef メソッドを呼び出します。アプリケーションは、それに関連付けられたリソースを解放するために IMcastScope インターフェイスに対して Release を呼び出す必要があります。
EnumerateScopes メソッドは、利用可能なマルチキャストスコープの列挙を作成します。このメソッドは主に C++ プログラマー向けです。Visual Basic やその他のスクリプト言語では代わりに get_Scopes を使用します。
| ppEnumMcastScope | IEnumMcastScope** | out | 新しい IEnumMcastScope オブジェクトへのポインターを返します。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| 呼び出し元が無効なポインター引数を渡しました。 | |
| 利用可能なスコープがありません。 | |
| 必要なオブジェクトを作成するのに十分なメモリがありません。 |
解説(Remarks)
TAPI は IMcastAddressAllocation::EnumerateScopes が返す IEnumMcastScope インターフェイスに対して AddRef メソッドを呼び出します。アプリケーションは、それに関連付けられたリソースを解放するために IEnumMcastScope インターフェイスに対して Release を呼び出す必要があります。
RequestAddress メソッドは、1 つ以上のマルチキャストアドレスに対する新しいリースを取得します。事前に EnumerateScopes または get_Scopes メソッドを呼び出しておく必要があります。
| pScope | IMcastScope* | inoptional | アプリケーションがアドレスを必要とするマルチキャストスコープを識別します。アプリケーションはまず get_Scopes または EnumerateScopes を呼び出して、利用可能なスコープの一覧を取得します。 |
| LeaseStartTime | DOUBLE | in | これらのアドレスに対するリースを開始する要求時刻。実際に付与される開始時刻は異なる場合があります。 |
| LeaseStopTime | DOUBLE | in | これらのアドレスに対するリースを終了する要求時刻。実際に付与される終了時刻は異なる場合があります。 |
| NumAddresses | INT | in | 要求するアドレスの数。実際に付与されるアドレスはこれより少ない場合があります。 |
| ppLeaseResponse | IMcastLeaseInfo** | out | 新しい IMcastLeaseInfo オブジェクトを指すように設定されるインターフェイスポインターへのポインター。このインターフェイスを使用して、付与されたリースの実際の属性を確認できます。詳細については IMcastScope を参照してください。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| 呼び出し元が無効なポインター引数を渡しました。 | |
| 必要なオブジェクトを作成するのに十分なメモリがありません。 | |
| 要求された終了時刻が要求された開始時刻より前です。 |
解説(Remarks)
これらの COM インターフェイスとその実装は複数アドレスの一括割り当てをサポートしていますが、その基盤となる関数呼び出しは現在のところ複数割り当てをサポートしていません。複数アドレスの割り当てにはループを使用する必要がある場合があります。
TAPI は IMcastAddressAllocation::RequestAddress が返す IMcastLeaseInfo インターフェイスに対して AddRef メソッドを呼び出します。アプリケーションは、それに関連付けられたリソースを解放するために IMcastLeaseInfo インターフェイスに対して Release を呼び出す必要があります。
RenewAddress メソッドは、アドレスリースを更新します。CreateLeaseInfo を呼び出して更新要求のパラメーターを指定し、その後にこのメソッドを呼び出して要求を行います。
| lReserved | INT | in | 予約済みパラメーター。アプリケーションは値 0 を渡す必要があります。 |
| pRenewRequest | IMcastLeaseInfo* | inoptional | どのアドレスを更新するかなど、要求する更新の属性を指定する IMcastLeaseInfo オブジェクトへのポインター。これは CreateLeaseInfo を呼び出して取得します。 |
| ppRenewResponse | IMcastLeaseInfo** | out | 新しい IMcastLeaseInfo オブジェクトを指すように設定されるインターフェイスポインターへのポインター。このインターフェイスを使用して、更新されたリースの属性を確認できます。詳細については IMcastScope を参照してください。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 呼び出し元が無効なポインター引数を渡しました。 | |
| 要求された終了時刻が要求された開始時刻より前です。 | |
| 必要なオブジェクトを作成するのに十分なメモリがありません。 |
ReleaseAddress メソッドは、以前に取得したリースを解放します。
| pReleaseRequest | IMcastLeaseInfo* | inoptional | リース情報インターフェイスへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 戻り値コード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 呼び出し元が無効なポインター引数を渡しました。 | |
| 要求を行うのに十分なメモリがありません。 |
CreateLeaseInfo メソッドは、後続の RenewAddress または ReleaseAddress の呼び出しのためにリース情報オブジェクトを作成します。
| LeaseStartTime | DOUBLE | in | リースの開始時刻。 |
| LeaseStopTime | DOUBLE | in | リースの終了時刻。 |
| dwNumAddresses | DWORD | in | リースに関連付けられたアドレスの数。 |
| ppAddresses | LPWSTR* | in | サイズ dwNumAddresses の LPWSTR ポインターの配列。各 LPWSTR はドット付き 4 進数表記の IP バージョン 4 アドレスです(例: 10.111.222.111)。 |
| pRequestID | LPWSTR | in | 元の要求のリクエスト ID を指定する LPWSTR。これは元の要求に対応するリース情報オブジェクトに対して IMcastLeaseInfo::get_RequestID を呼び出して取得します。リクエスト ID は、アプリケーションプログラムの実行間で永続的なストレージに保存しておく必要があります。アプリケーションの同じ実行中に要求されたリースを更新または解放する場合は、 CreateLeaseInfo を使用する理由はありません。既存の IMcastLeaseInfo ポインターを RenewAddress または ReleaseAddress に渡すだけで済みます。 |
| pServerAddress | LPWSTR | in | サーバーアドレスを指定します。 |
| ppReleaseRequest | IMcastLeaseInfo** | out | 作成された IMcastLeaseInfo インターフェイスへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| 呼び出し元が無効なポインター引数を渡しました。 | |
| 必要なオブジェクトを作成するのに十分なメモリがありません。 |
解説(Remarks)
TAPI は IMcastAddressAllocation::CreateLeaseInfo が返す IMcastLeaseInfo インターフェイスに対して AddRef メソッドを呼び出します。アプリケーションは、それに関連付けられたリソースを解放するために IMcastLeaseInfo インターフェイスに対して Release を呼び出す必要があります。
この関数はデータを暗号化されていない形式でネットワーク上に送信する場合があります。そのため、ネットワークを盗聴している者がデータを読み取れる可能性があります。このメソッドを使用する前に、データを平文で送信することのセキュリティリスクを考慮する必要があります。
CreateLeaseInfoFromVariant メソッドは、後続の RenewAddress または ReleaseAddress の呼び出しのためにリース情報オブジェクトを作成します。このメソッドは CreateLeaseInfo に似ていますが、Visual Basic などの Automation クライアント言語で使用されます。
| LeaseStartTime | DOUBLE | in | リースの開始時刻。 |
| LeaseStopTime | DOUBLE | in | リースの終了時刻。 |
| vAddresses | VARIANT | in | BSTR 文字列の SAFEARRAY を含む VARIANT。各 BSTR はドット付き 4 進数表記の IP バージョン 4 アドレスです(例: 10.111.222.111)。 |
| pRequestID | LPWSTR | in | 元の要求のリクエスト ID を指定する BSTR へのポインター。これは元の要求に対応するリース情報オブジェクトに対して IMcastLeaseInfo::get_RequestID を呼び出して取得します。リクエスト ID は、アプリケーションプログラムの実行間で永続的なストレージに保存しておく必要があります。アプリケーションの同じ実行中に要求されたリースを更新または解放する場合は、 CreateLeaseInfo を使用する理由はありません。既存の IMcastLeaseInfo ポインターを RenewAddress または ReleaseAddress に渡すだけで済みます。 |
| pServerAddress | LPWSTR | in | サーバーアドレスを指定する BSTR へのポインター。 |
| ppReleaseRequest | IMcastLeaseInfo** | out | 作成された IMcastLeaseInfo インターフェイスへのポインター。 |
戻り値
このメソッドは次のいずれかの値を返します。
| 値 | 意味 |
|---|---|
| メソッドは成功しました。 | |
| 呼び出し元が無効なポインター引数を渡しました。 | |
| 必要なオブジェクトを作成するのに十分なメモリがありません。 |
解説(Remarks)
アプリケーションは、pRequestID および pServerAddress パラメーターのメモリを割り当てるために SysAllocString を使用する必要があります。アプリケーションは、これらの変数が不要になったときにメモリを解放するために SysFreeString を使用する必要があります。
TAPI は IMcastAddressAllocation::CreateLeaseInfoFromVariant が返す IMcastLeaseInfo インターフェイスに対して AddRef メソッドを呼び出します。アプリケーションは、それに関連付けられたリソースを解放するために IMcastLeaseInfo インターフェイスに対して Release を呼び出す必要があります。
この関数はデータを暗号化されていない形式でネットワーク上に送信する場合があります。そのため、ネットワークを盗聴している者がデータを読み取れる可能性があります。このメソッドを使用する前に、データを平文で送信することのセキュリティリスクを考慮する必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMcastAddressAllocation "{DF0DAEF1-A289-11D1-8697-006008B0E5D2}" #usecom global IMcastAddressAllocation IID_IMcastAddressAllocation "{DF0DAEF2-A289-11D1-8697-006008B0E5D2}" #comfunc global IMcastAddressAllocation_get_Scopes 7 var #comfunc global IMcastAddressAllocation_EnumerateScopes 8 sptr #comfunc global IMcastAddressAllocation_RequestAddress 9 sptr,double,double,int,sptr #comfunc global IMcastAddressAllocation_RenewAddress 10 int,sptr,sptr #comfunc global IMcastAddressAllocation_ReleaseAddress 11 sptr #comfunc global IMcastAddressAllocation_CreateLeaseInfo 12 double,double,int,var,wstr,wstr,sptr #comfunc global IMcastAddressAllocation_CreateLeaseInfoFromVariant 13 double,double,int,wstr,wstr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IMcastAddressAllocation "{DF0DAEF1-A289-11D1-8697-006008B0E5D2}" #usecom global IMcastAddressAllocation IID_IMcastAddressAllocation "{DF0DAEF2-A289-11D1-8697-006008B0E5D2}" #comfunc global IMcastAddressAllocation_get_Scopes 7 sptr #comfunc global IMcastAddressAllocation_EnumerateScopes 8 sptr #comfunc global IMcastAddressAllocation_RequestAddress 9 sptr,double,double,int,sptr #comfunc global IMcastAddressAllocation_RenewAddress 10 int,sptr,sptr #comfunc global IMcastAddressAllocation_ReleaseAddress 11 sptr #comfunc global IMcastAddressAllocation_CreateLeaseInfo 12 double,double,int,sptr,wstr,wstr,sptr #comfunc global IMcastAddressAllocation_CreateLeaseInfoFromVariant 13 double,double,int,wstr,wstr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。