IWSDDeviceProxy
COM公式ドキュメント
クライアントアプリケーションおよびミドルウェアに対して、リモートの Devices Profile for Web Services (DPWS) デバイスを表します。
解説(Remarks)
このインターフェイスは、リモートデバイスのクライアント側表現です。このプロキシは、デバイスのメタデータ (WSD_THIS_DEVICE_METADATA および WSD_THIS_MODEL_METADATA) への基本的なアクセス手段に加え、サービスプロキシオブジェクトを作成するメソッドを提供します。サービスプロキシオブジェクトは、デバイス上でホストされるサービスに対応します。たとえば、テレビはデバイスであり、テレビのチューナー部分は、アクセス可能で不可分な機能の集合を持つ、デバイス上でホストされるサービスです。
IWSDDeviceProxy オブジェクトは、WSD 固有のデバイスセマンティクスを公開します。
クライアントアプリケーションまたはミドルウェアアプリケーションで IWSDDeviceProxy を使用するには、次の手順を実行します。
- WSDCreateDeviceProxy を呼び出します。
- デバイスプロキシオブジェクトの 4 つのメタデータメソッドのいずれかを呼び出します。
- GetServiceProxyById または GetServiceProxyByType を呼び出して、IWSDServiceProxy オブジェクトを取得します。
メソッド 10
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
デバイスプロキシを初期化します。必要に応じて、既に初期化済みのスポンサーとなるデバイスプロキシとセッションを共有します。
| pszDeviceId | LPWSTR | in | デバイスの論理アドレス (ID)。 |
| pDeviceAddress | IWSDAddress* | in | デバイスの構成データを格納する IWSDAddress オブジェクトへの参照。 |
| pszLocalId | LPWSTR | in | クライアントの論理アドレス。論理アドレスの形式は urn:uuid:{guid} です。サーバーがクライアントへの接続を開始する必要がある場合に使用されます。 |
| pContext | IWSDXMLContext* | inoptional | カスタムのメッセージ型または名前空間を定義する IWSDXMLContext オブジェクトへの参照。 NULL の場合、組み込みのメッセージ型および名前空間を表す既定のコンテキストが使用されます。 |
| pSponsor | IWSDDeviceProxy* | inoptional | セッションおよび下位レイヤーを共有する、省略可能なデバイスを表す IWSDDeviceProxy オブジェクトへの参照。 |
戻り値
戻り値には次のものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| pszDeviceId が NULL であるか、pszLocalId が NULL であるか、またはいずれかの識別子文字列の文字数が WSD_MAX_TEXT_LENGTH (8192) を超えています。 | |
| 操作を完了するためのメモリが不足しています。 |
解説(Remarks)
このメソッドは WSDCreateDeviceProxy から呼び出されるため、通常はクライアントコードから直接呼び出す必要はありません。
メタデータの非同期要求を送信します。
| ppResult | IWSDAsyncResult** | out | 操作が完了したかどうかを判定するために使用できる IWSDAsyncResult オブジェクトを返します。 |
戻り値
このメソッドは次のいずれかの値を返します。
戻り値には次のものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| ppResult が NULL です。 | |
| メソッドを完了できませんでした。 | |
| 操作を完了するためのメモリが不足しています。 |
解説(Remarks)
BeginGetMetadata は、デバイスプロキシに対してホストへのメタデータ要求の送信を強制します。EndGetMetadata が呼び出されると、最新のメタデータ取得結果に GetAllMetadata、GetHostMetadata、GetThisDeviceMetadata、GetThisModelMetadata の各メソッドからアクセスできるようになります。
メタデータの非同期要求を終了します。
| pResult | IWSDAsyncResult* | in | BeginGetMetadata によって返された IWSDAsyncResult オブジェクト。 |
戻り値
戻り値には次のものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| pResult が NULL です。 | |
| メソッドを完了できませんでした。 | |
| メソッドが失敗しました。メタデータが返されなかったか、無効であったか、またはフォールトが生成されました。 | |
| 操作を完了するためのメモリが不足しています。 |
解説(Remarks)
EndGetMetadata は、BeginGetMetadata によって返された IWSDAsyncResult オブジェクトが操作の完了を示した後にのみ呼び出す必要があります。EndGetMetadata が呼び出されると、最新のメタデータ取得結果に GetAllMetadata、GetHostMetadata、GetThisDeviceMetadata、GetThisModelMetadata の各メソッドからアクセスできるようになります。
デバイスの機能およびデバイスがホストするサービスを記述する、デバイスのクラス固有メタデータを取得します。
| ppHostMetadata | WSD_HOST_METADATA** | out | メタデータを指定する WSD_HOST_METADATA 構造体への参照。 このオブジェクトを解放しないでください。 |
戻り値
このメソッドは次のいずれかの値を返します。
戻り値には次のものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| ppHostMetadata が NULL です。 |
解説(Remarks)
GetHostMetadata は、デバイスプロキシにデバイスからのメタデータ取得を行わせません。代わりに、GetHostMetadata は BeginGetMetadata および EndGetMetadata の最後の呼び出しで取得されたメタデータを返します。これらのメソッドがいずれも呼び出されていない場合、GetHostMetadata は IWSDDeviceProxy オブジェクトの初期化時に取得されたメタデータを返します。
成功した場合、ppMetadata のメモリは、BeginGetMetadata または EndGetMetadata が呼び出されるまで、あるいは IWSDDeviceProxy オブジェクトが解放されるまで有効です。
デバイスのモデル固有メタデータを取得します。
| ppManufacturerMetadata | WSD_THIS_MODEL_METADATA** | out | 製造元およびモデル固有のメタデータを指定する WSD_THIS_MODEL_METADATA 構造体への参照。このオブジェクトを解放しないでください。 |
戻り値
このメソッドは次のいずれかの値を返します。
戻り値には次のものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| ppManufacturerMetadata が NULL です。 |
解説(Remarks)
GetThisModelMetadata は、デバイスプロキシにデバイスからのメタデータ取得を行わせません。代わりに、GetThisModelMetadata は BeginGetMetadata および EndGetMetadata の最後の呼び出しで取得されたメタデータを返します。これらのメソッドがいずれも呼び出されていない場合、GetThisModelMetadata は IWSDDeviceProxy オブジェクトの初期化時に取得されたメタデータを返します。
成功した場合、ppMetadata のメモリは、BeginGetMetadata または EndGetMetadata が呼び出されるまで、あるいは IWSDDeviceProxy オブジェクトが解放されるまで有効です。
このデバイスのデバイス固有メタデータを取得します。
| ppThisDeviceMetadata | WSD_THIS_DEVICE_METADATA** | out | このデバイスのデバイス固有メタデータを指定する WSD_THIS_DEVICE_METADATA 構造体への参照。 このオブジェクトを解放しないでください。 |
戻り値
このメソッドは次のいずれかの値を返します。
戻り値には次のものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| ppThisDeviceMetadata が NULL です。 |
解説(Remarks)
GetThisDeviceMetadata は、デバイスプロキシにデバイスからのメタデータ取得を行わせません。代わりに、GetThisDeviceMetadata は BeginGetMetadata および EndGetMetadata の最後の呼び出しで取得されたメタデータを返します。これらのメソッドがいずれも呼び出されていない場合、GetThisDeviceMetadata は IWSDDeviceProxy オブジェクトの初期化時に取得されたメタデータを返します。
成功した場合、ppMetadata のメモリは、BeginGetMetadata または EndGetMetadata が呼び出されるまで、あるいは IWSDDeviceProxy オブジェクトが解放されるまで有効です。
このデバイスのすべてのメタデータを取得します。
| ppMetadata | WSD_METADATA_SECTION_LIST** | out | デバイスに関連するすべてのメタデータを指定する WSD_METADATA_SECTION_LIST 構造体への参照。 このオブジェクトを解放しないでください。 |
戻り値
このメソッドは次のいずれかの値を返します。
戻り値には次のものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| ppMetadata が NULL です。 |
解説(Remarks)
このメソッドは、拡張メタデータにアクセスできるようにするために提供されています。製造元、サービスホスト、およびデバイス固有のメタデータは、それぞれの目的専用に用意されたメソッドを使用して取得するのが最適です。
GetAllMetadata は、デバイスプロキシにデバイスからのメタデータ取得を行わせません。代わりに、GetAllMetadata は BeginGetMetadata および EndGetMetadata の最後の呼び出しで取得されたメタデータを返します。これらのメソッドがいずれも呼び出されていない場合、GetAllMetadata は IWSDDeviceProxy オブジェクトの初期化時に取得されたメタデータを返します。
成功した場合、ppMetadata のメモリは、BeginGetMetadata または EndGetMetadata が呼び出されるまで、あるいは IWSDDeviceProxy オブジェクトが解放されるまで有効です。
サービス ID を指定して、汎用の IWSDServiceProxy サービスプロキシを取得します。
| pszServiceId | LPWSTR | in | サービス ID。 |
| ppServiceProxy | IWSDServiceProxy** | out | 指定されたサービスプロキシに対応する IWSDServiceProxy オブジェクトへのポインター。 |
戻り値
戻り値には次のものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| ppServiceProxy が NULL です。 | |
| pszServiceId の文字数が WSD_MAX_TEXT_LENGTH (8192) を超えているか、または pszServiceId で指定されたサービスに関連付けられたメタデータが存在しません。 | |
| 操作を完了するためのメモリが不足しています。 | |
| サービスプロキシに関連付けられたエンドポイントが存在しません。 |
ポート型名を指定して、デバイスが公開するサービスの汎用 IWSDServiceProxy プロキシを取得します。
| pType | WSDXML_NAME* | in | ポート型名を指定する WSDXML_NAME 構造体への参照。 |
| ppServiceProxy | IWSDServiceProxy** | out | 指定されたサービスに関連付けられた IWSDServiceProxy オブジェクトへのポインター。 |
戻り値
戻り値には次のものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| pType または ppServiceProxy が NULL です。 | |
| pType で指定されたサービスに関連付けられたメタデータが存在しません。 | |
| 操作を完了するためのメモリが不足しています。 | |
| サービスプロキシに関連付けられたエンドポイントが存在しません。 |
解説(Remarks)
デバイスが指定された型のサービスを複数ホストしている場合、そのうちいずれか 1 つのサービスのプロキシが返される可能性があります。そのような場合、呼び出し元は特定のサービスプロキシが返されることを前提にしないでください。
デバイスのエンドポイントプロキシを取得します。
| ppProxy | IWSDEndpointProxy** | out | このデバイスのデバイスサービスメッセージングプロキシを実装する IWSDEndpointProxy インターフェイス。 |
戻り値
このメソッドは次のいずれかの値を返します。
戻り値には次のものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| ppProxy が NULL です。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWSDDeviceProxy "{EEE0C031-C578-4C0E-9A3B-973C35F409DB}" #usecom global IWSDDeviceProxy IID_IWSDDeviceProxy "{}" #comfunc global IWSDDeviceProxy_Init 3 wstr,sptr,wstr,sptr,sptr #comfunc global IWSDDeviceProxy_BeginGetMetadata 4 sptr #comfunc global IWSDDeviceProxy_EndGetMetadata 5 sptr #comfunc global IWSDDeviceProxy_GetHostMetadata 6 var #comfunc global IWSDDeviceProxy_GetThisModelMetadata 7 var #comfunc global IWSDDeviceProxy_GetThisDeviceMetadata 8 var #comfunc global IWSDDeviceProxy_GetAllMetadata 9 var #comfunc global IWSDDeviceProxy_GetServiceProxyById 10 wstr,sptr #comfunc global IWSDDeviceProxy_GetServiceProxyByType 11 var,sptr #comfunc global IWSDDeviceProxy_GetEndpointProxy 12 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IWSDDeviceProxy "{EEE0C031-C578-4C0E-9A3B-973C35F409DB}" #usecom global IWSDDeviceProxy IID_IWSDDeviceProxy "{}" #comfunc global IWSDDeviceProxy_Init 3 wstr,sptr,wstr,sptr,sptr #comfunc global IWSDDeviceProxy_BeginGetMetadata 4 sptr #comfunc global IWSDDeviceProxy_EndGetMetadata 5 sptr #comfunc global IWSDDeviceProxy_GetHostMetadata 6 sptr #comfunc global IWSDDeviceProxy_GetThisModelMetadata 7 sptr #comfunc global IWSDDeviceProxy_GetThisDeviceMetadata 8 sptr #comfunc global IWSDDeviceProxy_GetAllMetadata 9 sptr #comfunc global IWSDDeviceProxy_GetServiceProxyById 10 wstr,sptr #comfunc global IWSDDeviceProxy_GetServiceProxyByType 11 sptr,sptr #comfunc global IWSDDeviceProxy_GetEndpointProxy 12 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。