はい、実際には「または」です。説明します。DirectXToolKit などのヘルパー クラスを自分で開発しています。COM の管理には、Microsoft::WRL::ComPtr< T > (wrl.h)を使用しています。
struct Renderer
{
ComPtr<ID3D11Device> m_Device;
ComPtr<ID3D11DeviceContext> m_ImmContext;
}
すべてのリソースが破棄されると、上記の構造体のインスタンスも破棄されるはずですが、dtor が呼び出された後、デバイスを解放しようとすると、Microsoft::WRL::ComPtr< T >でエラーが発生します。またはコンテキスト。
m_Device と m_ImmContext を手動で解放する dtor を実装しましたが、残念ながら、解放しようとする最後のメンバーは常に関数で問題が発生します。
unsigned long InternalRelease() throw()
{
unsigned long ref = 0;
T* temp = ptr_;
if (temp != nullptr)
{
ptr_ = nullptr;
ref = temp->Release();
}
return ref;
}
ここ
ref = temp->Release();
最初にデバイスの解放に成功すると、コンテキストがエラーをトリガーし、その逆も同様です (! はい、デバイスの 1 つが正常に解放された場合、2 番目のメンバーの破棄は失敗します)。私のような質問 ( directx デバイスとスワップ チェーンを破棄する ) が既にありましたが、他の dx リソースと同様に、ウィンドウとスワップ チェーンは既に破棄されています。なぜこれが起こっているのか分かりません。何か案は?
私の不完全な英語でごめんなさい:3