IDXGIResource::GetSharedHandle メソッド (dxgi.h)
[Direct3D 11.1 以降では、 GetSharedHandle を使用して共有リソースへのハンドルを取得しないことをお勧めします。 代わりに、 IDXGIResource1::CreateSharedHandle を使用して共有のハンドルを取得します。 IDXGIResource1::CreateSharedHandle を使用するには、リソースを共有として作成し、NT ハンドルを使用するように指定する必要があります (つまり、D3D11_RESOURCE_MISC_SHARED_NTHANDLE フラグを設定します)。 また、これらの共有リソースで CloseHandle、 DuplicateHandle などを使用できるように、NT ハンドルを使用する共有リソースを作成することをお勧めします。
共有リソースへのハンドルを取得します。
構文
HRESULT GetSharedHandle(
[out] HANDLE *pSharedHandle
);
パラメーター
[out] pSharedHandle
型: HANDLE*
ハンドルへのポインター。
戻り値
型: HRESULT
DXGI_ERROR値のいずれかを返します。
解説
GetSharedHandle は、共有として作成したリソースのハンドルを返します (つまり、D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX フラグの有無にかかわらず、D3D11_RESOURCE_MISC_SHAREDを設定します)。 このハンドルを ID3D11Device::OpenSharedResource メソッドに渡して、別のデバイスに共有リソースへのアクセス権を付与できます。 また、このハンドルを別のプロセスにマーシャリングして、別のプロセスのデバイスとリソースを共有することもできます。 ただし、このハンドルは NT ハンドルではありません。 そのため、 CloseHandle、 DuplicateHandle などのハンドルは使用しないでください。
共有リソースの作成者は、目的のすべてのエンティティがリソースを開くまで、リソースを破棄することはできません。 ハンドルの有効性は、基になるビデオ メモリの有効期間に関連付けられます。 このリソースを参照するデバイスにリソース オブジェクトが存在しない場合、ハンドルは無効になります。 ハンドルとビデオ メモリの有効期間を延長するには、デバイスで共有リソースを開く必要があります。
GetSharedHandle は、 ID3D11Device::OpenSharedResource に渡されたリソースのハンドルを返して、それらのリソースを開くこともできます。
ハンドルを取得するリソースが共有されていない場合、GetSharedHandle は失敗します。
要件
対象プラットフォーム | Windows |
ヘッダー | dxgi.h |
Library | DXGI.lib |