Win32 API 日本語リファレンス
ホームGraphics.Direct3D11 › ID3D11Device1

ID3D11Device1

COM
IIDa04bfb29-08ef-43d6-a49c-a9bdbdcbe686継承元ID3D11Device自前メソッド開始 vtbl43

公式ドキュメント

デバイスインターフェイスは仮想アダプターを表し、リソースの作成に使用します。ID3D11Device1 は ID3D11Device のメソッドに加えて、新しいメソッドを追加します。

メソッド 7

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

vtbl 43 void GetImmediateContext1(ID3D11DeviceContext1** ppImmediateContext)

コマンドリストを再生できるイミディエイトコンテキストを取得します。(ID3D11Device1.GetImmediateContext1)

ppImmediateContextID3D11DeviceContext1**outメソッドの完了時に、渡された ID3D11DeviceContext1 インターフェイスポインターへのポインターが初期化されます。

解説(Remarks)

GetImmediateContext1 は、イミディエイトコンテキストを表す ID3D11DeviceContext1 オブジェクトを返します。このイミディエイトコンテキストを使用すると、デバイスに直ちに送信したいレンダリングを実行できます。ほとんどのアプリケーションでは、イミディエイトコンテキストがシーンの描画に使用する中心的なオブジェクトになります。

GetImmediateContext1 は、イミディエイトコンテキストの参照カウントを 1 つ増やします。そのため、メモリリークを避けるために、使用を終えたら返されたインターフェイスポインターに対して Release を呼び出してください。

vtbl 44 HRESULT CreateDeferredContext1(DWORD ContextFlags, ID3D11DeviceContext1** ppDeferredContext)

コマンドリストを記録できる遅延コンテキストを作成します。(ID3D11Device1.CreateDeferredContext1)

ContextFlagsDWORDin将来の使用のために予約されています。 0 を指定してください。
ppDeferredContextID3D11DeviceContext1**outoptionalメソッドの完了時に、渡された ID3D11DeviceContext1 インターフェイスポインターへのポインターが初期化されます。

戻り値

成功した場合は S_OK を返します。それ以外の場合は、次のいずれかを返します。

解説(Remarks)

遅延コンテキストはスレッドセーフなコンテキストであり、メインのレンダリングスレッド以外のスレッドでグラフィックスコマンドを記録するために使用できます。 遅延コンテキストを使用すると、ID3D11CommandList インターフェイスにカプセル化されたコマンドリストにグラフィックスコマンドを記録できます。 シーンの項目をすべて記録した後、最終的なレンダリングのためにそれらをメインのレンダリングスレッドに送信できます。 この方法により、複数のスレッドで並行してレンダリング処理を実行でき、マルチコア CPU 環境ではパフォーマンスの向上が期待できます。

遅延コンテキストは複数作成できます。

メモ ID3D11Device1 が表すデバイスを D3D11_CREATE_DEVICE_SINGLETHREADED 値を使用して作成した場合、CreateDeferredContext1 メソッドは失敗し、遅延コンテキストを作成できません。
遅延コンテキストの詳細については、イミディエイトレンダリングと遅延レンダリング を参照してください。

Windows Phone 8: この API はサポートされています。

vtbl 45 HRESULT CreateBlendState1(D3D11_BLEND_DESC1* pBlendStateDesc, ID3D11BlendState1** ppBlendState)

出力マージャーステージのブレンドステートをカプセル化し、論理演算の構成を可能にするブレンドステートオブジェクトを作成します。

pBlendStateDescD3D11_BLEND_DESC1*inブレンドステートを記述する D3D11_BLEND_DESC1 構造体へのポインター。
ppBlendStateID3D11BlendState1**outoptional作成されたブレンドステートオブジェクトの ID3D11BlendState1 インターフェイスへのポインターのアドレス。

戻り値

ブレンドステートオブジェクトを作成するためのメモリが不足している場合、このメソッドは E_OUTOFMEMORY を返します。
その他の戻り値については、Direct3D 11 の戻り値コード を参照してください。

解説(Remarks)

論理演算 (ピクセルシェーダーの出力とレンダーターゲットの内容との間でビットごとの論理演算を有効にするもの。D3D11_RENDER_TARGET_BLEND_DESC1 を参照) は、特定の機能レベルでのみ使用できます。サポートされているかどうかを確認するには、D3D11_FEATURE_D3D11_OPTIONS を指定して CheckFeatureSupport を呼び出し、D3D11_FEATURE_DATA_D3D11_OPTIONS のブール値フィールド OutputMergerLogicOp を確認してください。

アプリケーションは、一意なブレンドステートオブジェクトを最大 4096 個作成できます。オブジェクトを作成するたびに、ランタイムは同じステートを持つオブジェクトが既に存在するかどうかを確認します。そのようなオブジェクトが既に存在する場合、ランタイムは重複するオブジェクトを作成せず、既存のインスタンスへのポインターを返します。

vtbl 46 HRESULT CreateRasterizerState1(D3D11_RASTERIZER_DESC1* pRasterizerDesc, ID3D11RasterizerState1** ppRasterizerState)

ラスタライザーステージの動作を指定し、UAV レンダリングまたはラスタライズ時にサンプル数を強制するラスタライザーステートオブジェクトを作成します。(ID3D11Device1.CreateRasterizerState1)

pRasterizerDescD3D11_RASTERIZER_DESC1*inラスタライザーステートを記述する D3D11_RASTERIZER_DESC1 構造体へのポインター。
ppRasterizerStateID3D11RasterizerState1**outoptional作成されたラスタライザーステートオブジェクトの ID3D11RasterizerState1 インターフェイスへのポインターのアドレス。

戻り値

ラスタライザーステートオブジェクトを作成するためのメモリが不足している場合、このメソッドは E_OUTOFMEMORY を返します。その他の戻り値については、Direct3D 11 の戻り値コード を参照してください。

解説(Remarks)

アプリケーションは、一意なラスタライザーステートオブジェクトを最大 4096 個作成できます。オブジェクトを作成するたびに、ランタイムは同じステートを持つオブジェクトが既に存在するかどうかを確認します。そのようなオブジェクトが既に存在する場合、ランタイムは重複するオブジェクトを作成せず、既存のインスタンスへのポインターを返します。

vtbl 47 HRESULT CreateDeviceContextState(DWORD Flags, D3D_FEATURE_LEVEL* pFeatureLevels, DWORD FeatureLevels, DWORD SDKVersion, GUID* EmulatedInterface, D3D_FEATURE_LEVEL* pChosenFeatureLevel, ID3DDeviceContextState** ppContextState)

Microsoft Direct3D のすべてのステートと一部の Direct3D の動作を保持するコンテキストステートオブジェクトを作成します。

FlagsDWORDin

ビットごとの OR 演算で組み合わせた D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG 値の組み合わせ。 結果の値は、コンテキストステートオブジェクトの作成方法を指定します。 現在定義されているフラグは D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED フラグのみです。 元のデバイスを D3D11_CREATE_DEVICE_SINGLETHREADED を指定して作成した場合、そのデバイスから作成するすべてのコンテキストステートオブジェクトには D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED フラグを指定する必要があります。

コンテキストステートオブジェクトとデバイスの両方にシングルスレッドフラグを設定した場合、コンテキストのメソッドとデバイスのメソッドの一式を 1 つのスレッドからのみ呼び出すことを保証することになります。 そのため、デバイスコンテキストへのアクセスを同期するためにクリティカルセクションを使用する必要がなくなり、ランタイムはプロセッサー負荷の高いクリティカルセクションの処理を回避できます。

pFeatureLevelsD3D_FEATURE_LEVEL*in

D3D_FEATURE_LEVEL 値の配列へのポインター。この配列には次の一覧の要素を含めることができ、作成を試みる機能レベルの順序を決定します。 D3D11CreateDevice とは異なり、既定の機能レベル配列が存在しないため、pFeatureLevelsNULL を指定することはできません。

{
    D3D_FEATURE_LEVEL_11_1,
    D3D_FEATURE_LEVEL_11_0,
    D3D_FEATURE_LEVEL_10_1,
    D3D_FEATURE_LEVEL_10_0,
    D3D_FEATURE_LEVEL_9_3,
    D3D_FEATURE_LEVEL_9_2,
    D3D_FEATURE_LEVEL_9_1,
};
          
FeatureLevelsDWORDinpFeatureLevels の要素数。D3D11CreateDevice とは異なり、pFeatureLevelsNULL を指定できないため、FeatureLevels には 0 より大きい値を設定する必要があります。
SDKVersionDWORDinSDK のバージョン。このパラメーターには D3D11_SDK_VERSION を指定する必要があります。
EmulatedInterfaceGUID*inエミュレートするインターフェイスのグローバル一意識別子 (GUID)。この値は、コンテキストステートオブジェクトが有効なときのデバイスの動作を指定します。有効な値は、ID3D10DeviceID3D10Device1ID3D11DeviceID3D11Device1 の各インターフェイスに __uuidof 演算子を使用して取得します。「解説」を参照してください。
pChosenFeatureLevelD3D_FEATURE_LEVEL*outoptionalpFeatureLevels 配列から選ばれた D3D_FEATURE_LEVEL 値を受け取る変数へのポインター。これは、CreateDeviceContextState がコンテキストステートオブジェクトの作成に成功した最初の配列値です。CreateDeviceContextState の呼び出しが失敗した場合、pChosenFeatureLevel が指す変数は 0 に設定されます。
ppContextStateID3DDeviceContextState**outoptionalDirect3D デバイスのステートを表す ID3DDeviceContextState オブジェクトへのポインターのアドレス。

戻り値

型: HRESULT

このメソッドは、Direct3D 11 の戻り値コード のいずれかを返します。

解説(Remarks)

エミュレートするインターフェイスの REFIID 値は、__uuidof 演算子を使用して取得する GUID です。たとえば __uuidof(ID3D11Device) は、Microsoft Direct3D 11 デバイスのインターフェイスの GUID を取得します。

コンテキストステートオブジェクトを有効にするには、ID3D11DeviceContext1::SwapDeviceContextState メソッドを呼び出します。 コンテキストステートオブジェクトが有効な間は、そのコンテキストステートオブジェクトの機能レベルと互換インターフェイスの両方に関連付けられたデバイスの動作が、次に SwapDeviceContextState を呼び出すまで Direct3D デバイス上で有効になります。

コンテキストステートオブジェクトが有効な間、ランタイムはデバイスインターフェイスおよびコンテキストインターフェイスの一部のメソッドを無効にします。たとえば、__uuidof(ID3D11Device) で作成したコンテキストステートオブジェクトでは、ランタイムは Microsoft Direct3D 10 のデバイスインターフェイスのほとんどを無効にします。__uuidof(ID3D10Device1) または __uuidof(ID3D10Device) で作成したコンテキストステートオブジェクトでは、ランタイムは ID3D11DeviceContext のメソッドのほとんどを無効にします。 この動作により、いずれかのエミュレートインターフェイスの利用者が、もう一方のエミュレートインターフェイスでは表現できないデバイスステートを設定できないことが保証されます。この制限によって、ID3D10Device1 エミュレートインターフェイスがパイプラインの状態全体を正確に反映し、本来のインターフェイス定義に反する動作をしないことが保証されます。

たとえば、Direct3D 10 の同等の関数ではなく D3D11CreateDevice または D3D11CreateDeviceAndSwapChain でデバイスを作成し、ID3D11DeviceContext インターフェイスを通じてテセレーションステージを有効にした場合を考えます。 このとき Direct3D 11 のコンテキストが有効であるため、QueryInterface で Direct3D 10 インターフェイスを最初に取得した時点では、そのインターフェイスは無効です。つまり、Direct3D 11 デバイスから取得した Direct3D 10 インターフェイスを、そのまま関数に渡すことはできません。まず SwapDeviceContextState を呼び出して、Direct3D 10 互換のコンテキストステートオブジェクトを有効にする必要があります。

次の表は、エミュレートインターフェイスごとに有効になるメソッドと無効になるメソッドを示しています。

エミュレートインターフェイス 有効なデバイスインターフェイスまたはイミディエイトコンテキストインターフェイス 無効なデバイスインターフェイスまたはイミディエイトコンテキストインターフェイス

ID3D11Device or

ID3D11Device1

ID3D11Device

IDXGIDevice +

IDXGIDevice1 +

IDXGIDevice2

ID3D10Multithread

ID3D10Device

ID3D10Device1 or

ID3D10Device

ID3D10Device

ID3D10Device1

IDXGIDevice +

IDXGIDevice1

ID3D10Multithread

ID3D11Device

ID3D11DeviceContext (イミディエイトコンテキストが公開するもの。Direct3D 10 または Microsoft Direct3D 10.1 のエミュレートインターフェイスは、遅延コンテキストには影響しません。)

 

次の表は、指定したコンテキストステートオブジェクトが有効なときにランタイムが無効にするイミディエイトコンテキストのメソッドを示しています。

__uuidof(ID3D10Device1) または __uuidof(ID3D10Device) が有効なときの ID3D11DeviceContext のメソッド __uuidof(ID3D11Device) が有効なときの ID3D10Device のメソッド

ClearDepthStencilView

ClearDepthStencilView

ClearRenderTargetView

ClearRenderTargetView

ClearState

ClearState

ClearUnorderedAccessViewUint

ClearUnorderedAccessViewFloat

CopyResource

CopyResource

CopyStructureCount

CopySubresourceRegion

CopySubresourceRegion

CSGetConstantBuffers

CSGetSamplers

CSGetShader

CSGetShaderResources

CSGetUnorderedAccessViews

CSSetConstantBuffers

CSSetSamplers

CSSetShader

CSSetShaderResources

CSSetUnorderedAccessViews

Dispatch

DispatchIndirect

CreateBlendState

Draw

Draw

DrawAuto

DrawAuto

DrawIndexed

DrawIndexed

DrawIndexedInstanced

DrawIndexedInstanced

DrawIndexedInstancedIndirect

DrawInstanced

DrawInstanced

DrawInstancedIndirect

DSGetConstantBuffers

DSGetSamplers

DSGetShader

DSGetShaderResources

DSSetConstantBuffers

DSSetSamplers

DSSetShader

DSSetShaderResources

ExecuteCommandList

FinishCommandList

Flush

Flush

GenerateMips

GenerateMips

GetPredication

GetPredication

GetResourceMinLOD

GetType

GetTextFilterSize

GSGetConstantBuffers

GSGetConstantBuffers

GSGetSamplers

GSGetSamplers

GSGetShader

GSGetShader

GSGetShaderResources

GSGetShaderResources

GSSetConstantBuffers

GSSetConstantBuffers

GSSetSamplers

GSSetSamplers

GSSetShader

GSSetShader

GSSetShaderResources

GSSetShaderResources

HSGetConstantBuffers

HSGetSamplers

HSGetShader

HSGetShaderResources

HSSetConstantBuffers

HSSetSamplers

HSSetShader

HSSetShaderResources

IAGetIndexBuffer

IAGetIndexBuffer

IAGetInputLayout

IAGetInputLayout

IAGetPrimitiveTopology

IAGetPrimitiveTopology

IAGetVertexBuffers

IAGetVertexBuffers

IASetIndexBuffer

IASetIndexBuffer

IASetInputLayout

IASetInputLayout

IASetPrimitiveTopology

IASetPrimitiveTopology

IASetVertexBuffers

IASetVertexBuffers

OMGetBlendState

OMGetBlendState

OMGetDepthStencilState

OMGetDepthStencilState

OMGetRenderTargets

OMGetRenderTargets

OMGetRenderTargetsAndUnorderedAccessViews

OMSetBlendState

OMSetBlendState

OMSetDepthStencilState

OMSetDepthStencilState

OMSetRenderTargets

OMSetRenderTargets

OMSetRenderTargetsAndUnorderedAccessViews

PSGetConstantBuffers

PSGetConstantBuffers

PSGetSamplers

PSGetSamplers

PSGetShader

PSGetShader

PSGetShaderResources

PSGetShaderResources

PSSetConstantBuffers

PSSetConstantBuffers

PSSetSamplers

PSSetSamplers

PSSetShader

PSSetShader

PSSetShaderResources

PSSetShaderResources

ResolveSubresource

ResolveSubresource

RSGetScissorRects

RSGetScissorRects

RSGetState

RSGetState

RSGetViewports

RSGetViewports

RSSetScissorRects

RSSetScissorRects

RSSetState

RSSetState

RSSetViewports

RSSetViewports

SetPredication

SetPredication

SetResourceMinLOD

SetTextFilterSize

SOGetTargets

SOGetTargets

SOSetTargets

SOSetTargets

UpdateSubresource

UpdateSubresource

VSGetConstantBuffers

VSGetConstantBuffers

VSGetSamplers

VSGetSamplers

VSGetShader

VSGetShader

VSGetShaderResources

VSGetShaderResources

VSSetConstantBuffers

VSSetConstantBuffers

VSSetSamplers

VSSetSamplers

VSSetShader

VSSetShader

VSSetShaderResources

VSSetShaderResources

 

次の表は、指定したコンテキストステートオブジェクトが有効なときでもランタイムが無効にしないイミディエイトコンテキストのメソッドを示しています。

__uuidof(ID3D10Device1) または __uuidof(ID3D10Device) が有効なときの ID3D11DeviceContext のメソッド __uuidof(ID3D11Device) が有効なときの ID3D10Device のメソッド

Begin

End

GetCreationFlags

GetPrivateData

GetContextFlags

GetData

Map

Unmap

 

次の表は、イミディエイトコンテキストのメソッドではないためランタイムが無効にしない ID3D10Device インターフェイスのメソッドを示しています。

ID3D10Device のメソッド

CheckCounter

CheckCounterInfo

CreateQuery などの Create* メソッド

GetDeviceRemovedReason

GetExceptionMode

OpenSharedResource

SetExceptionMode

SetPrivateData

SetPrivateDataInterface

 

Windows Phone 8: この API はサポートされています。

vtbl 48 HRESULT OpenSharedResource1(HANDLE hResource, GUID* returnedInterface, void** ppResource)

別のデバイスで作成され、ハンドルによって参照される共有リソースへのアクセス権をデバイスに与えます。

hResourceHANDLEin開くリソースへのハンドル。このパラメーターの詳細については、「解説」を参照してください。
returnedInterfaceGUID*inリソースインターフェイスのグローバル一意識別子 (GUID)。このパラメーターの詳細については、「解説」を参照してください。
ppResourcevoid**outアクセスする共有リソースオブジェクトのインターフェイスへのポインターを受け取る変数へのポインター。

戻り値

このメソッドは、Direct3D 11 の戻り値コード のいずれかを返します。また、リソースへのアクセス許可が有効でない場合は E_ACCESSDENIED を返します。

Platform Update for Windows 7: Platform Update for Windows 7 をインストールした Windows 7 または Windows Server 2008 R2 では、NTHANDLE が使用されるため、OpenSharedResource1E_NOTIMPL で失敗します。Platform Update for Windows 7 の詳細については、Platform Update for Windows 7 を参照してください。

解説(Remarks)

OpenSharedResource1 の動作は ID3D11Device::OpenSharedResource メソッドの動作に似ています。リソースにアクセスするために OpenSharedResource1 を呼び出すたびに、新しいリソースオブジェクトが作成されます。 つまり、OpenSharedResource1 を 2 回呼び出して同じリソースハンドルを hResource に渡すと、異なる IUnknown ポインターを持つ 2 つのリソースオブジェクトが得られます。

2 つのデバイス間でリソースを共有するには

  1. D3D11_RESOURCE_MISC_SHARED_NTHANDLE フラグを設定して、リソースを共有として作成し、NT ハンドルを使用することを指定します。
  2. __uuidof() マクロを使用して、リソースのインターフェイスの REFIID (GUID) を取得します。たとえば __uuidof(ID3D11Texture2D) は、2D テクスチャのインターフェイスの GUID を取得します。
  3. リソースに対して IDXGIResource1 インターフェイスをクエリします。
  4. IDXGIResource1::CreateSharedHandle メソッドを呼び出して、リソースの一意なハンドルを取得します。

HANDLE handle = GetSharedHandleFromOtherProcess();
ID3D11Device1* pDevice;
ID3D11Texture2D* pTexture2D;

pDevice->OpenSharedResource1(
          handle, 
          __uuidof(ID3D11Texture2D), 
          (void**)&pTexture2D);
vtbl 49 HRESULT OpenSharedResourceByName(LPWSTR lpName, DWORD dwDesiredAccess, GUID* returnedInterface, void** ppResource)

別のデバイスで作成され、名前によって参照される共有リソースへのアクセス権をデバイスに与えます。

lpNameLPWSTRin開くリソースの名前。このパラメーターに NULL を指定することはできません。
dwDesiredAccessDWORDin

リソースに対して要求するアクセス権。汎用アクセス権 に加えて、DXGI では次の値が定義されています。

これらの値は、ビットごとの OR 演算で組み合わせることができます。
returnedInterfaceGUID*inリソースインターフェイスのグローバル一意識別子 (GUID)。詳細については、「解説」を参照してください。
ppResourcevoid**outアクセスする共有リソースオブジェクトのインターフェイスへのポインターを受け取る変数へのポインター。

戻り値

このメソッドは、Direct3D 11 の戻り値コード のいずれかを返します。また、リソースへのアクセス許可が有効でない場合は E_ACCESSDENIED を返します。

Platform Update for Windows 7: Platform Update for Windows 7 をインストールした Windows 7 または Windows Server 2008 R2 では、NTHANDLE が使用されるため、OpenSharedResourceByNameE_NOTIMPL で失敗します。Platform Update for Windows 7 の詳細については、Platform Update for Windows 7 を参照してください。

解説(Remarks)

OpenSharedResourceByName の動作は ID3D11Device1::OpenSharedResource1 メソッドの動作に似ています。リソースにアクセスするために OpenSharedResourceByName を呼び出すたびに、新しいリソースオブジェクトが作成されます。 つまり、OpenSharedResourceByName を 2 回呼び出して同じリソース名を lpName に渡すと、異なる IUnknown ポインターを持つ 2 つのリソースオブジェクトが得られます。

2 つのデバイス間でリソースを共有するには

  1. D3D11_RESOURCE_MISC_SHARED_NTHANDLE フラグを設定して、リソースを共有として作成し、NT ハンドルを使用することを指定します。
  2. __uuidof() マクロを使用して、リソースのインターフェイスの REFIID (GUID) を取得します。たとえば __uuidof(ID3D11Texture2D) は、2D テクスチャのインターフェイスの GUID を取得します。
  3. リソースに対して IDXGIResource1 インターフェイスをクエリします。
  4. IDXGIResource1::CreateSharedHandle メソッドを呼び出して、リソースの一意なハンドルを取得します。その後 OpenSharedResourceByName を呼び出して名前でリソースにアクセスする場合は、この IDXGIResource1::CreateSharedHandle の呼び出しでリソースの名前を渡す必要があります。

ID3D11Device1* pDevice;
ID3D11Texture2D* pTexture2D;

pDevice->OpenSharedResourceByName(
          "MySurface", 
          DXGI_SHARED_RESOURCE_READ, 
          __uuidof(ID3D11Texture2D), 
         (void**)&pTexture2D);
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_ID3D11Device1 "{A04BFB29-08EF-43D6-A49C-A9BDBDCBE686}"
#usecom global ID3D11Device1 IID_ID3D11Device1 "{}"
#comfunc global ID3D11Device1_GetImmediateContext1      43 sptr
#comfunc global ID3D11Device1_CreateDeferredContext1    44 int,sptr
#comfunc global ID3D11Device1_CreateBlendState1         45 var,sptr
#comfunc global ID3D11Device1_CreateRasterizerState1    46 var,sptr
#comfunc global ID3D11Device1_CreateDeviceContextState  47 int,var,int,int,var,var,sptr
#comfunc global ID3D11Device1_OpenSharedResource1       48 sptr,var,sptr
#comfunc global ID3D11Device1_OpenSharedResourceByName  49 wstr,int,var,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。