次の方法で共有


ID3D11Device1::OpenSharedResource1 メソッド (d3d11_1.h)

ハンドルによって参照され、別のデバイス上に作成された共有リソースへのアクセス権をデバイスに付与します。 リソースを共有として作成し、NT ハンドルを使用するように指定しておく必要があります (つまり、 D3D11_RESOURCE_MISC_SHARED_NTHANDLE フラグを設定します)。

構文

HRESULT OpenSharedResource1(
  [in]  HANDLE hResource,
  [in]  REFIID returnedInterface,
  [out] void   **ppResource
);

パラメーター

[in] hResource

開くリソースへのハンドル。 このパラメーターの詳細については、「解説」を参照してください。

[in] returnedInterface

リソース インターフェイスのグローバル一意識別子 (GUID)。 このパラメーターの詳細については、「解説」を参照してください。

[out] ppResource

アクセスする共有リソース オブジェクトのインターフェイスへのポインターを受け取る変数へのポインター。

戻り値

このメソッドは、 Direct3D 11 のリターン コードのいずれかを返します。 このメソッドは、リソースにアクセスするためのアクセス許可が無効な場合もE_ACCESSDENIEDを返します。

Windows 7 のプラットフォーム更新プログラム: Windows 7 用プラットフォーム更新プログラム がインストールされている Windows 7 または Windows Server 2008 R2 では、NTHANDLES が使用されているため、 OpenSharedResource1 はE_NOTIMPLで失敗します。 Windows 7 のプラットフォーム更新プログラムの詳細については、「Windows 7 用プラットフォーム更新プログラム」を参照してください。

注釈

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

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

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

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

pDevice->OpenSharedResource1(
          handle, 
          __uuidof(ID3D11Texture2D), 
          (void**)&pTexture2D);

要件

要件
サポートされている最小のクライアント Windows 7 のWindows 8とプラットフォーム更新プログラム [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows Server 2008 R2 のWindows Server 2012とプラットフォーム更新プログラム [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー d3d11_1.h
Library D3D11.lib

こちらもご覧ください

ID3D11Device1