Date

Direct3D9 デバッグランタイムを使うとVMR9のIVMRSurfaceAllocatorNotify9::SetD3DDeviceが失敗 (E_NOINTERFACE) する。

再現方法

  1. DirectX Control Panelで、Debug Runtimeを使うように設定する。

  1. stdafx.h に#define D3D_DEBUG_INFOを記述する。

エラーが発生するコードは以下。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
class CAllocator  : public IVMRSurfaceAllocator9, IVMRImagePresenter9
{
    STDMETHODIMP AdviseNotify(
        /* [in] */ IVMRSurfaceAllocatorNotify9 *lpIVMRSurfAllocNotify);
...
STDMETHODIMP
CAllocator::AdviseNotify(IVMRSurfaceAllocatorNotify9 *lpIVMRSurfAllocNotify) {
    CAutoLock Lock(&m_Lock);
    HRESULT hr;
    m_lpIVMRSurfAllocNotify=lpIVMRSurfAllocNotify;
    HMONITOR hMonitor=m_D3D->GetAdapterMonitor(D3DADAPTER_DEFAULT);
    hr=m_lpIVMRSurfAllocNotify->SetD3DDevice(m_D3DDev, hMonitor); //ここでエラー
    return hr;
}

対策 : デバッグランタイムを使わないか Direct3D9Ex (Vista以降) を使う。


Comments

comments powered by Disqus