ID3D10DeviceChild
COM公式ドキュメント
デバイス子インターフェイスは、デバイスが使用するデータにアクセスします。(ID3D10DeviceChild)
解説(Remarks)
デバイス子インターフェイスにはいくつかの種類があり、いずれもこのインターフェイスを継承します。これには、シェーダー、ステートオブジェクト、入力レイアウトが含まれます。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
このインターフェイスを作成したデバイスへのポインターを取得します。(ID3D10DeviceChild.GetDevice)
| ppDevice | ID3D10Device** | out | デバイスへのポインターのアドレス(ID3D10Device インターフェイス を参照)。 |
解説(Remarks)
返されたインターフェイスは参照カウントが 1 つ増加するため、解放する前に、返されたポインターに対して ::release() を必ず呼び出してください。そうしないとメモリリークが発生します。
デバイス子からアプリケーション定義のデータを取得します。(ID3D10DeviceChild.GetPrivateData)
| guid | GUID* | in | データに関連付けられた GUID。 |
| pDataSize | DWORD* | inout | データのサイズ。 |
| pData | void* | outoptional | デバイス子に格納されているデータへのポインター。pData が NULL の場合、DataSize も 0 でなければならず、その GUID に以前関連付けられていたデータはすべて破棄されます。 |
戻り値
型: HRESULT
このメソッドは、次の Direct3D 10 リターンコード のいずれかを返します。
解説(Remarks)
返されるデータが、以前に SetPrivateDataInterface によって設定された IUnknown またはその派生クラスへのポインターである場合、そのインターフェイスは、プライベートデータが返される前に参照カウントが増加します。
アプリケーション定義のデータをデバイス子に設定し、そのデータをアプリケーション定義の GUID に関連付けます。(ID3D10DeviceChild.SetPrivateData)
| guid | GUID* | in | データに関連付ける GUID。 |
| DataSize | DWORD | in | データのサイズ。 |
| pData | void* | inoptional | このデバイス子に格納するデータへのポインター。pData が NULL の場合、DataSize も 0 でなければならず、指定した GUID に以前関連付けられていたデータはすべて破棄されます。 |
戻り値
型: HRESULT
このメソッドは、次の Direct3D 10 リターンコード のいずれかを返します。
解説(Remarks)
このメソッドでデバイス子に格納されたデータは、ID3D10DeviceChild::GetPrivateData で取得できます。
IUnknown 派生インターフェイスをこのデバイス子に関連付け、そのインターフェイスをアプリケーション定義の GUID に関連付けます。(ID3D10DeviceChild.SetPrivateDataInterface)
| guid | GUID* | in | インターフェイスに関連付ける GUID。 |
| pData | IUnknown* | inoptional | デバイス子に関連付ける IUnknown 派生インターフェイスへのポインター。参照カウントは、設定時に増加し、ID3D10DeviceChild が破棄されるか、同じ GUID で SetPrivateData または SetPrivateDataInterface を呼び出してデータが上書きされたときに減少します。 |
戻り値
型: HRESULT
このメソッドは、次の Direct3D 10 リターンコード のいずれかを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID3D10DeviceChild "{9B7E4C00-342C-4106-A19F-4F2704F689F0}" #usecom global ID3D10DeviceChild IID_ID3D10DeviceChild "{}" #comfunc global ID3D10DeviceChild_GetDevice 3 sptr #comfunc global ID3D10DeviceChild_GetPrivateData 4 var,var,sptr #comfunc global ID3D10DeviceChild_SetPrivateData 5 var,int,sptr #comfunc global ID3D10DeviceChild_SetPrivateDataInterface 6 var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ID3D10DeviceChild "{9B7E4C00-342C-4106-A19F-4F2704F689F0}" #usecom global ID3D10DeviceChild IID_ID3D10DeviceChild "{}" #comfunc global ID3D10DeviceChild_GetDevice 3 sptr #comfunc global ID3D10DeviceChild_GetPrivateData 4 sptr,sptr,sptr #comfunc global ID3D10DeviceChild_SetPrivateData 5 sptr,int,sptr #comfunc global ID3D10DeviceChild_SetPrivateDataInterface 6 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。